今天我将文本处理命令的学习心得与大家一起分享,请大家多多指点

Linux操作系统中有许多文本处理工具,如cattacmorelessheadtailcutjoinwctrsedsort等等,每种文本处理工具所处理的文本信息和处理方式各不相同,下面对这些文本处理命令做常用指令介绍

文本显示:

cat:将文本内容从头到尾全部一次性显示在屏幕上,一般用于查看文件内容比较少的文件

用法:# cat [mode] [file]

-n 显示文本内容时显示行号,只是为了查看方便,并不更改文件元数据

-E 显示文本内容每行的结束符,Linux中默认为$Windows中默认为$+回车

-T 显示文本内容中的制表符

-v 显示文件中的其他非打印字符

-A 显示所有文本信息

cat+回车:将标准输入,并以标准输出到屏幕上

 

tac:将文本内容从尾部到头全部一次性显示在屏幕上,一般用于查看小文件

参数同cat

 

head:显示文本内容的头部几行,系统默认显示十行

用法:# head [-n] [file]

-n  显示文本信息头部n

 

tail:显示文本内容最后几行,默认显示十行

用法:# tail [-n] [file]

-n  显示文本信息尾部n

-f  显示之后并不退出,而等待追加新内容,一般用于监测服务器的运行日志

 

more:将文本内容分屏显示,按空格键向下翻一屏,方向键翻一行,默认不支持向上翻,当翻到文本最后一行时自动退出,不支持管道

用法:# more file

 

less:将文本内容分屏显示,按空格键向下翻一屏,b键向上翻一屏,方向键翻一行,翻到最后一行并不自动退出,按q键退出,支持管道

用法:# less file

文本处理:

cut:指定文本剪切显示

-d 指定字段分隔符,默认为一个空格

-f 指定要切割显示的字段,不能单独使用

如:# cut -d: -f1,3 [-f1-3] /etc/passwd

显示文件passwd中第一个字段和第三个字段[第一个字段到第三个字段]的内容,中间以“:”隔开

 

join:多文本合并显示

如:# join -v file1 -v file2

将文件file1file2的内容一起显示在屏幕上

 

wc:对文件内容进行统计显示,默认统计字符个数,单词个数,行数

用法:# wc [mode] [file]

-c  统计文本中有多少字节

-w 统计文本中有多少单词

-l  统计文本中多少行

-m 统计文本中有多少字符

-L 统计文本中最长行有多少个字符

-a 显示全部统计信息,系统默认wc == wc -a

 

tr:转换或删除字符,逐个字符进行处理,支持重定向和管道

如:# tr ab AB < /etc/passwd

将文件passwd中所有小写ab转换为大写AB

# tr a < /tmp/test

将文件test中的所有小写字母a删除掉

 

sed:转换或删除文本内容,以行为单位进行操作,默认不修改文件元数据,只是将需要的文件内容显示到屏幕上

用法:sed [mode] command file

-n  进入安静模式;默认为将读取到的内容 全部显示到屏幕上,使用-n参数之后只显示要查找的内容,一般在有特殊字符是使用

-e  支持多个脚本同时运行;脚本 -e 脚本。。。。。

-f filename  将符合条件的文本内容保存到文件filename

-r  使得sed命令支持扩展正则表达式的使用

-i  直接修改文件元数据

a \+内容[\n]  在指定行的后面追加新内容,内容跟在加号后面,内容一般使用双引号引起来,\n表示换行符

d  删除符合条件的行,只显示不符合条件的行

i \+内容  在指定行后面添加内容

nr filename  filename中的内容添加到符合条件的行后,nr表示添加到第n行后边

w filename  filename中的内容另存到指定文件中

s  对文本内容进行查找替换

g  在全局进行指定操作

p  将查找到的内容打印出来,此时会显示两次,sed本身显示一次,p打印一次

实例:$最后一行,1,n第一行到第n行,\转义字符,将其后边的字符指标是字符本身的意思

# sed 1d test 删除test文件的第一行

# sed $d test 删除test文件的最后一行

# sed 1,3d test 删除test文件中的第一行到第三行

# sed -n 3p test 显示test文件中第三行

# sed -n /root/p /etc/passwd 将文件passwd中含有root的行全部显示

# sed -f file1 file2 。。。。 将文件file2等保存到file1

# sed -r /^$/d /etc/inittab 将文件inittab中所有的空白行删除

# sed -r s@^[[:space:]]\{1,\}[[:punct:]]@ @g /etc/inittab

# sed 5a this is test file \nthis is two test 在文件test第五行下边添加两行,内容为

this is test file

this is two

# sed 3i this is test test 在文件test的第三行上边添加一行,内容为this is test

# sed -n ^\# /etc/inittab 查看文件test中所有以#开头的行,此处的反斜线是为了让后边的#仅仅表示自身

# sed s/root/user/g test 将文件test中所有单词root更换为user,如果不加g,则只是更换每一行第一个被找到的字符串

s后边跟的三个斜杠可以换为任意特殊字符,如#$&

# cat /etc/passwd | sed s# #,#g 将文件passwd中所有的空格改为逗号

# sed 3r /etc/issue test 将文件issue中的内容添加到test的第三行后边

# sed \bash/w test /etc/passwd 将文件passwd中含有bash的行保存到文件test

 

sort:文本排序显示,只将输出内容进行排序,并不改变文件元数据,而sort默认以ASCII码为标准进行排序

用法:# sort [mode] file

-n  数值排序,按照输出内容的数值大小进行排序

-r  逆序排列,安照ASCII的反顺序进行排序

-t  指定字段的分隔符

-k  以某一字段为标准进行排序,一般按照自左而右进行排序

-u  排序之后省略文本中的重复内容,系统默认相连的两行才为重复行

sort -u == uniq

-f  排序时忽略字符大小写

实例:# sort -n test test文件中的内容进行排序显示,并且之比较字母,数字和空格

# sort -f -r test test文件中的内容进行逆序显示,排序时不区分字符大小写

# sort -f -u -n test test文件中的内容以字母,但不区分字符大小写排序,并且将重复行省略

# sort -t: +n test test文件中的内容以第n个字符段开始进行排序,并且每个字符段之间以冒号隔开,此处的+n表示从第n个字符段开始进行

# sort -t: -kn,m test test文件中的内容以第n行的第m个字段开始排序,每个字段之间以冒号隔开,此处的-knm表示以第n行第m个字符段为标准进行

# sort -u +0 -f -r test test中的内容进行排序,并且省去重复行,此处的+0表示进行另一项比较,以区分不一样的行

如果有写的不足地方请大家多多指点