小巧精悍——常见文本处理工具用法及技巧总结

小巧精悍——常见文本处理工具用法及技巧总结

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-显示非打印字符

1.jpg

使用技巧:

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  在进行比较时忽略大小写

图像 3.jpg

14、paste

paste和join命令很相似,但是paste没有进行比较的字段,而是将后面的文件,按对应行直接合并到第一个文件的对应行后面。

常用选项:

-d 指明合并后两个文件内容之间的分隔符,默认以tab键分隔

-s 将各文件输出在一行上,各文件分别按行输出

图像 4.jpg

15、diff

用于比较两个文件的不同之处,尤其在对某些大型文件进行修改之后,想要找到哪些地方做过修改,往往比较困难,利用diff可以很方便的定位。另外结合输出重定向,diff也经常被用来制作补丁;指定不同的选项,可以输出不同格式的补丁文件。

16、patch

根据diff生成的补丁文件,可以对用来的文件进行修改、升级,也可以根据补丁文件对升级后的文件进行降级、还原。

用法:patch  file  patchfile

原创文章,作者:M21-张国辉,如若转载,请注明出处:http://www.178linux.com/57691

(0)
M21-张国辉M21-张国辉
上一篇 2016-11-05 20:07
下一篇 2016-11-05 20:39

相关推荐

  • 管道、重定向和用户管理练习

    前面一章学习了硬链接和软链接,回顾上一章节内容:    硬链接:在inode表中记录一个条目,所有的元数据和原始文件元数据相同。        ·相当于两个名字。        ·删除原始文件,另一个条目也能够…

    Linux干货 2016-08-04
  • 高级文件管理系统

    1、 设定文件系统配额 在内核中执行: • 以文件系统即分区为单位启用 • 对不同组或者用户的策略不同 根据块或者节点进行限制: • 执行软限制(soft limit),限时限制 • 硬限制(hard limit) 初始化: • 分区挂载选项,针对用户或组:usrquota 、grpquota • 初始化数据库,也即是创建用户或组文件系统配额数据库:quot…

    Linux干货 2016-09-01
  • 第六周练习

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; # cp /etc/rc.d/rc.sysinit /tmp # vim /tmp/rc.sysinit 末行模式下:%s@^[[:space:]]\+@#&am…

    Linux干货 2016-12-03
  • PHP数组实际占用内存大小的分析

    我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存: <?php      &nb…

    系统运维 2015-05-28
  • Linux的文本处理工具及grep正则表达式的使用

    文本处理工具及grep正则表达式的使用 本章节学习的内容: 1、各种文本工具来查看、分析、统计文本文件 2、grep正则表达式 3、扩展正则表达式 一、抽取文本的工具: 1、按文件内容:less和cat 2、按文件截取:head和tail 3、按列抽取:cut 4、按关键字抽取:grep 二、文件查看命令:cat, tac,rev 1、命令cat: (1)文…

    Linux干货 2016-08-05
  • 学会在命令行中获取帮助

    在命令行中获取帮助是学习Linux必须get的一项技能,学会之后受益多多。  Linux中的命令有内部命令和外部命令之分,通常使用 type 命令来区分 除此之外还可以使用 enable 命令来查看内部命令 enable命令后的许多option可以对这些内部命令了解更多,比如: 想要知道内部命令有多少个 enable -a |wc -l 禁用某个内…

    2017-07-15