今天我将文本处理命令的学习心得与大家一起分享,请大家多多指点
Linux操作系统中有许多文本处理工具,如cat,tac,more,less,head,tail,cut,join,wc,tr,sed,sort等等,每种文本处理工具所处理的文本信息和处理方式各不相同,下面对这些文本处理命令做常用指令介绍
文本显示:
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
将文件file1和file2的内容一起显示在屏幕上
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个字段开始排序,每个字段之间以冒号隔开,此处的-kn,m表示以第n行第m个字符段为标准进行
# sort -u +0 -f -r test 将test中的内容进行排序,并且省去重复行,此处的+0表示进行另一项比较,以区分不一样的行
如果有写的不足地方请大家多多指点