Linux下常用文本处理命令大全
Linux下面有很多经典的非常有用的命令,其中处理文本的命令就有很多。下面就让我们一起看看这些经典的Linux文本处理命令有哪些吧。
一. sort
文件排序, 通常用在管道中当过滤器来使用. 这个命令可以依据指定的关键字或指定的字符位置, 对文件行进行排序. 使用-m选项, 它将会合并预排序的输入文件. 想了解这个命令的全部参数请参考这个命令的info页.
二. tsort
拓扑排序, 读取以空格分隔的有序对, 并且依靠输入模式进行排序.
三. uniq
这个过滤器将会删除一个已排序文件中的重复行. 这个命令经常出现在sort命令的管道后边.
四. expand, unexpand
expand命令将会把每个tab转化为一个空格. 这个命令经常用在管道中.
unexpand命令将会把每个空格转化为一个tab. 效果与expand命令相反.
五. cut
一个从文件中提取特定域的工具. 这个命令与awk中使用的print $N命令很相似, 但是更受限. 在脚本中使用cut命令会比使用awk命令来得容易一些. 最重要的选项就是-d(字段定界符)和-f(域分隔符)选项.
六. paste
将多个文件, 以每个文件一列的形式合并到一个文件中, 合并后文件中的每一列就是原来的一个文件. 与cut结合使用, 经常用于创建系统log文件.
七. join
这个命令与paste命令属于同类命令. 但是它能够完成某些特殊的目地. 这个强力工具能够以一种特殊的形式来合并两个文件, 这种特殊的形式本质上就是一个关联数据库的简单版本.
join命令只能够 *** 作两个文件. 它可以将那些具有特定标记域(通常是一个数字标签)的行合并起来, 并且将结果输出到stdout. 被加入的文件应该事先根据标记域进行排序以便于能够正确的匹配.
八. head
把文件的头部内容打印到stdout上(默认为10行, 可以自己修改). 这个命令有一些比较有趣的选项.
九. tail
将一个文件结尾部分的内容输出到stdout中(默认为10行). 通常用来跟踪一个系统logfile的.修改情况, 如果使用-f选项的话, 这个命令将会继续显示添加到文件中的行.
十. wc
wc可以统计文件或I/O流中的”单词数量”:
十一. fold
将输入按照指定宽度进行折行. 这里有一个非常有用的选项-s, 这个选项可以使用空格进行断行(译者: 事实上只有外文才需要使用空格断行, 中文是不需要的)(请参考例子 12-23和例子 A-1).
十二. fmt
一个简单的文件格式器, 通常用在管道中, 将一个比较长的文本行输出进行”折行”.
十三. col
这个命令用来滤除标准输入的反向换行符号. 这个工具还可以将空白用等价的tab来替换. col工具最主要的应用还是从特定的文本处理工具中过滤输出, 比如groff和tbl. (译者: 主要用来将man页转化为文本.)
十四. column
列格式化工具. 通过在合适的位置插入tab, 这个过滤工具会将列类型的文本转化为”易于打印”的表格式进行输出.
十五. colrm
列删除过滤器. 这个工具将会从文件中删除指定的列(列中的字符串)并且写到文件中, 如果指定的列不存在, 那么就回到stdout. colrm 2 4 <filename将会删除filename文件中每行的第2到第4列之间的所有字符. p=""> </filename将会删除filename文件中每行的第2到第4列之间的所有字符.>
Caution: 如果这个文件包含tab和不可打印字符, 那将会引起不可预期的行为. 在这种情况下, 应该通过管道的手段使用expand和unexpand来预处理colrm.
十六. nl
计算行号过滤器. nl filename将会把filename文件的所有内容都输出到stdout上, 但是会在每个非空行的前面加上连续的行号. 如果没有filename参数, 那么就 *** 作stdin.
nl命令的输出与cat -n非常相似, 然而, 默认情况下nl不会列出空行.
十七. pr
格式化打印过滤器. 这个命令会将文件(或stdout)分页, 将它们分成合适的小块以便于硬拷贝打印或者在屏幕上浏览. 使用这个命令的不同的参数可以完成好多任务, 比如对行和列的 *** 作, 加入行, 设置页边, 计算行号, 添加页眉, 合并文件等等. pr命令集合了许多命令的功能, 比如nl, paste, fold, column, 和expand.
pr -o 5 –width=65 fileZZZ | more 这个命令对fileZZZ进行了比较好的分页, 并且打印到屏幕上. 文件的缩进被设置为5, 总宽度设置为65.
一个非常有用的选项-d, 强制隔行打印(与sed -G效果相同).
十八. gettext
GNU gettext包是专门用来将程序的输出翻译或者本地化为不同国家语言的工具集. 在最开始的时候仅仅支持C语言, 现在已经支持了相当数量的其它程序语言和脚本语言.
想要查看gettext程序如何在shell脚本中使用. 请参考info页.
十九. msgfmt
一个产生二进制消息目录的程序. 这个命令主要用来本地化.
二十. iconv
一个可以将文件转化为不同编码格式(字符集)的工具. 这个命令主要用来本地化.
二十一. recode
可以认为这个命令是上边iconv命令的专业版本. 这个非常灵活的并可以把整个文件都转换为不同编码格式的工具并不是Linux标准安装的一部分.
二十二. TeX, gs
TeX和Postscript都是文本标记语言, 用来对打印和格式化的视频显示进行预拷贝.
TeX是Donald Knuth精心制作的排版系统. 通常情况下, 通过编写脚本的手段来把所有的选项和参数封装起来一起传到标记语言中是一件很方便的事情.
一个比较经典的问题:如果线上机器的磁盘占用率超级高,怎么办?
这时候优先想到的肯定是,定位到占用磁盘空间最大的那些文件,然后把可以删的给删掉。
那么,问题来了,如何定位到占用磁盘空间最大的文件?
一个办法是执行如下命令:
里面涉及三个指令:du、sort、more
既然用到了,就顺便多了解一下这三个指令的用法,算是做下个人笔记。
首先是du
作用:用来查看文件所占用的磁盘情况。
格式:du [选项] [文件]
可用选项(如下为du --help展示的内容):
*** 作示例:
对几个比较常用的选项单独拿出来,在机器上实际 *** 作,效果如下:
首先,当前目录如下:
du:
其实吧,从图里面可以看到,使用“du”的时候,最后一行就当前目录的磁盘使用总量,所以,感觉一般情况下-c这个选项并没有什么用。
du -s:只计算总量
不过,注意:-s与-a不能同时存在,会报错的。
sort
作用:对输出的结果进行排序
可用选项:
-r:代表逆序排序
-n:按照字符串数值排序
-g:按照常规数值排序
-f:忽略字母大小写
实测效果:
首先是测试文件的原始状态:
测试一:sort
可以发现:
空行排在了第一位;
不管数字有多大,字符串都会排在数字的后面;
数字之间排序的时候,优先考虑首位数字(感觉是把数字也当成了一个字符串进行排序);
more
作用:用于一页一页地展示文件内容。
几个常用 *** 作:
空格:翻到下一页
b:翻到上一页
/:启动字符串搜索(类似于vim)
此外:
more +n XXX:从XXX文件的第n行开始展示
more -n XXX:展示XXX文件,并且将n行视为一页,也就是按空格时,只会显示后续的N行
cat
作用:一次性的展示所有文件内容
cat有两个比较有用的选项:
-n:输出所有行号
-b:只对非空行输出行号
此外,
cat支持同时输出多个文件的内容:cat XXX YYYY ZZZZ
并且,cat可以与more结合使用:cat XXX | more 或者 cat XXX YYYY ZZZZ | more 或者 cat -n XXX | more
less:
作用:对文件或者输出内容进行分页展示,并且less可以用于打开多个文件
常用 *** 作:
j:向上滚动一行
k:向下滚动一行(类似于vim)
g:跳到第一行
G:跳到最后一行
b:向上翻一页
空格:翻页
n%:跳转到整个文件的n%处
:e :在使用less打开多个文件时,使用“:e”选择跳转到其他文件去
/:进行字符串搜索
v:启动编辑
常用选项:
-N:在每一行前面都显示行号
-m:显示读取文件的百分比
-M:显示读取文件的百分比、行号和总行数
注意:
其他两个比较简单的指令:
head:显示一个文件的前N行
用法:head -n 行数 文件名
tail:显示一个文件的最后N行
用法:tail -n 行数 文件名
不过,使用tai的时候,因为-f选项可以自动显示新增加的内容,所以经常会使用如下方式:
tail -f 文件名
Linux上查找最大文件的3种方法
第一种:ls
最简单的方法就是借助 ls 命令,因为 ls 命令本身输出是带文件大小信息的。
比如,我要列出 /data/log/ 目录中的20个最大文件,可以:
ls -lSh /data/log/ | head -20
第二种:find
find 本身就是查找命令,可以递归查找一个目录的子目录,所以用它是自然的。
比如,查找/etc目录下最大的5个文件:
find /etc -type f -printf “%s\t%p\n” | sort -n | tail -5 | xargs ls -Slh
查找当前用户名下最大的10个文件
find $HOME -type f -printf “%s\t%p\n” | sort -nr | head -10 | xargs ls -Slh
查询大于200M的文件
find / -type f -size +200M | xargs ls -Slh
查询100M和200M之间的文件
find / -type f -size +100M -size +200M | xargs ls -Slh
查询root目录下最大的5个文件
find /root -type f -exec ls -s {} | sort -n | tail -n5 | xargs ls -Slh
查询/目录下10天以前最大的5个文件
find / -type f -mtime +10 -printf “%s\t%p\n” | sort -n | tail -5 | xargs ls -Slh
第三种:du
du 命令可以查看磁盘空间的使用情况,自然也可以用来查看磁盘上占用空间较多的文件和文件夹。
查找/root下5个最大的文件
du -ah /root | sort -nr | head -n5
查找当前目录下最大的5个目录
du -ah | sort -nr | head -n5
查找根目录下最大目录/文件(包括子文件夹)
du -Sh / | sort -rh | head -n10
只看大小在 GB 范围内的所有文件
du -ah / | grep “[0-9]G\b”
涉及到的命令参数:
find:
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-mtime n 查找系统中最后n天被改变文件数据的文件 +大于 -小于
-type 查找某一类型的文件
b -块设备文件;
c -字符设备文件;
d -目录;
p -管道文件;
f -普通文件;
l -符号链接文件;
s -socket文件;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
sort:
-n 依照数值的大小排序;
-r 以相反的顺序来排序;
xargs:传递参数
ls -Slh
-Sl 从大到小显示详情
-Slr 从小到大显示详情
-h humans 以人类易读的方式显示(正常情况下显示为bit,加上-h后 显示的为KB MB GB TB等)
du:
-a 显示所有目录或文件的大小
-h 以K,M,G为单位,提高信息可读性
-S 显示目录的大小,但不含子目录大小
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)