小巧精悍——常见文本处理工具用法及技巧总结
Linux最重要的哲学思想就是:一切皆文件。可见文件及文件操作在Linux当中是多么的重要。在Linux系统中我们也会经常用到各种文本文件处理的操作,熟练使用这些小巧精悍的文本处理工具,在关键时刻往往展现非凡的神奇功效。常见文本处理小工具:cat、hexdump、nl、less、head、tail、cut、tr、rev、wc、uniq、sort、join、paste、diff、patch。
1、cat
常常被用来读取文本文件的内容如:cat file1.txt
并且当加上选项的时候可以显示特殊字符,尤其当我们运行一个脚本总是出错,检测各种语法发现没有问题的时候,可以使用cat -A 来看看是不是文件包含了某些非法字符。
常用选项:
-n 显示行号
-b 仅非空白行显示行号
-A 相当于-vET,显示某些不可见的控制、非打印字符
-E 显示行尾结束符$
-T 以^I显示文件中的TAB制表符
-v 以^和M-显示非打印字符
使用技巧:
a、其实除了用于读取文件内容,cat还可以被用来创建简短的文本文件。
cat > abc.txt 编辑完成后按 Ctrl+d 键退出
cat > 123.txt << eof 编辑完成后,以单独的一行“eof”来结束输入(eof不会加入文件内容)。
b、对文件进行合并输出,或者将多个文件合并为一个文件。尤其是当我们使用split命令来对大文件分割时,当我们想使用文件的时候,就可以使用cat来进行文件的合并。
cat file1 file2 file3 … > file
2、hexdump
利用hexdump可以方便的以十六进制或八进制格式来查看数据文件。在某些情况下会非常有帮助。
常用选项:
-C 分别以十六进制和ACSII字符显示文件内容
-n # 只显示文件的前#个字符
使用技巧:
结合-n选项可以用来查看某设备(磁盘mbr)或二进制文件的头信息。
3、nl
nl也是一个非常常用的文本查看工具,使用nl查看工具,默认会为每一行添加行号。
4、less
less也是一个读取文本文件内容的工具,但是less可以分屏显示,而不是像cat那样直接把全部的文件内容显示在屏幕上,这对于内容较多的大型文件的查阅非常方便。并且使用less可以方便的控制上下翻屏,可以使用 /KEYWORD 来按关键词就行搜索。当然less也可以显示行号,只需要加上-N选项即可。
常用命令:
h 打开帮助信息
q 退出less
j 向下滚动一行
k 向上滚动一行
f 向下翻一屏
b 向上翻一屏
d 向下翻半屏
u 向上翻半屏
g 跳转至第一行
G 跳转至最后一行
/pattern 从光标所在处向下搜索指定的pattern
?pattern 从光标所在处向上搜索指定的pattern
n 跳到下一个匹配的搜索关键字
N 跳到上一个匹配到的关键字
使用技巧:
当某一命令的输出结果很长,不方便查看的时候,可以使用管道( | )重定向到less进行查看、搜索,如COMMAND | less。
5、head
主要用来查看一个文件的前面的指定部分,默认显示文件的前10行。
常用选项:
-c # 显示文件的前#个字符
-n # 显示文件的前#行,也可直接写为 -#
使用技巧:
我们知道对于MBR分区的磁盘来说mbr是非常重要的,它记录这磁盘的引导数据和磁盘的整个分区表。使用head -c 512 /dev/sda > mbr 就可以方便的实现对磁盘mbr(master boot record)的备份了。恢复mbr,可以使用dd if=mbr of=/dev/sda bs=1 count=512。
6、tail
tail命令刚好和head相反,主要用来查看文件的尾部部分,默认显示文件的后10行。
常用选项:
-c # 显示文件的后#个字符
-n # 显示文件的后#行,也可直接写为 -#
-f动态显示文件尾部的新增加内容
使用技巧:
a、tail -n 0 -f file 可以只显示文件file的新增加内容
b、配合head可以方便的实现取出文件中指定行的操作,如取出文件file中的第#行,可以使用head -n # | tail -n 1
7、cut
用以取出文件或标准输出中的某些字段(列)。这个工具的强大之处,在于可以根据具体情况指定各个字段的分隔符号。
常用选项:
-d 用于指明进行分割的分隔符,默认以tab键进行分隔
-f 用于指定要取出的某些字段
#: 第# 个字段
#,#[,#] :离散的多个字段,例如1,3,6
#-# : 连续的多个字段, 例如1-6
#-: 从第#个字段往后的所有字段
-c 按字符进行分隔,取出指定的字符或字符串
-s 对不包含分隔符的行,不进行处理
–output-delimiter= 指定输出样式中各字段的分隔符
8、tr
tr主要用于进行字符替换或删除。tr的强大在于,它不仅可以操作普通字符,还可以操作控制字符,并且可以对需要的字符进行替换、删除、压缩(去重),灵活的运用这些功能,往往可以实现不凡的功效。
常用选项:
-d 删除文件中包含在给定字符集中的字符
-c 对给定的字符集取反
-s 给定的字符集,如果在文件中多次连续出现,则删除重复只保留一个
使用技巧:
a、当要使用cut想取出某个文件的特定字段时,往往会出现这些字段之间有多个空格进行分隔,并且每行各字段之间的空格数量各不相等。对于这种情况,就可以使用tr -s ‘ ‘对文件中的重复空格进行压缩处理,使每个字段之间以单个空格进行分隔,然后再使用cut -d’ ‘ -f就可以方便的取出目标字段了。
b、对于某些文件中只有回车的空白行(非第一行),借助tr -s ‘\n’ 可以实现删除空白行。
9、rev
使用rev可以实现字符串的左右倒转。对于某些长度不固定,或者字段数量不固定的情况,我们如果要取出最后的几个字段或字符,按常规的方法往往非常困难。这时利用rev结合就可以方便的实现:rev|cut|rev。
10、wc
wc主要实现对文本的统计功能,结合相应的选项,可以实现对文件按字符、字节、单词、行数进行统计。
常用选项:
-c 按字节进行统计
-m 按字符进行统计
-l 按行进行统计
-w 按单词进行统计
注意事项:
wc的输出结果包含条件的最终数量结果,同时包含有文件名,在某些情况下,若想要单独输出数字结果,需要结合cut取出第一个字段即可。
11、uniq
uniq主要对文件中的连续重复行进行操作,在Linux的操作过程中也是经常会用到的。
常用选项:
-c 显示重复行的重复次数
-d 只显示重复的行
-u 仅显示不重复的行
-i 忽略字符的大小写
注意事项:
uniq所定义的重复的前后连续重复的行,而不是整个文件中的重复行,在实际的应用中要统计整个文件中的重复行,我们往往需要结合sort命令来进行大致排序,让整个文件中重复的行前后相连续,如何再用uniq进行统计或操作。
12、sort
sort主要实现对文件中的内容以行为单位进行排序,默认以第一个字符进行排序,也可结合选项指定排序的关键词字段。
常用选项:
-t 指定各字段的分隔符
-k 指定按某字段的关键词进行排序
-u 删除(不输出)重复的行
-f 忽略字符大小写
-n 以数字的数值大小进行排序
-r 对排序结果,以反序输出
注意事项:
a、sort的执行默认是按字符进行排序的,各字符的排序顺序012…789aAbB…zZ。如果不指定排序的关键词字段,默认以第一个字符进行排序,第一个字符相同的按第二个字符排序,以此类推。
b、对于数字的排序,默认也是按a中所说的字符进行排序,若要要数字的大小进行排序需要使用 -n 选项。
13、join
用来合并两个文件。当两个经过排序的文件,其中某个字段内容相同,则可以将另一个文件中该字段对应的其他字段内容合并到第一个文件中对应字段的后面。默认两个文件按第一个字段进行对比,各字段之间以空格分隔。
常用选项:
-a 文件中指定字段含有没有匹匹配的行,同样进行输出
-t 指定字段的分隔符
-1# 指定文件1按第#个字段进行匹配
-2# 指定文件2按第#个字段进行匹配
-i 在进行比较时忽略大小写
14、paste
paste和join命令很相似,但是paste没有进行比较的字段,而是将后面的文件,按对应行直接合并到第一个文件的对应行后面。
常用选项:
-d 指明合并后两个文件内容之间的分隔符,默认以tab键分隔
-s 将各文件输出在一行上,各文件分别按行输出
15、diff
用于比较两个文件的不同之处,尤其在对某些大型文件进行修改之后,想要找到哪些地方做过修改,往往比较困难,利用diff可以很方便的定位。另外结合输出重定向,diff也经常被用来制作补丁;指定不同的选项,可以输出不同格式的补丁文件。
16、patch
根据diff生成的补丁文件,可以对用来的文件进行修改、升级,也可以根据补丁文件对升级后的文件进行降级、还原。
用法:patch file patchfile
原创文章,作者:M21-张国辉,如若转载,请注明出处:http://www.178linux.com/57691