Linux 文本处理三剑客

一、grep:文本过滤工具

grep 语法格式:

grep [OPTIONS] PATTERN [FIFE] grep 参数 匹配模式 查找的文件 参数选项 解释说明
-v   显示不匹配的行,或者说排除某些行,显示不包含匹配文本的所有行  
-n   显示匹配行及行号  
-i   不区分大小写(只适用于单字符),默认是区分大小写的  
-c   只统计匹配的行数,注意不是匹配的次数  
-E   使用扩展的 egrep 命令  
--color=auto   为 grep 过滤的匹配字符串添加颜色  
-w   只匹配过滤的单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)  
-o   只输出匹配的内容  

有文本如下(test.txt)

test dongye oldboy linux ubuntu centos LOL dota2 i like playing dota2 1.1 -v 参数实践 # 过滤不包含oldboy字符串的行,注意被过滤的字符串,尽可能使用双引号 grep -v "dota2" test.txt >>> test dongye oldboy linux ubuntu centos LOL

提示: grep 的 -v 参数的作用是排除,默认是以行为单位排除包含参数后面所接内容的某些行

1.2 -n 参数实践 # 输出包含 oldboy 字符串的行,并显示行号 grep -n "dota2" test.txt >>> 1:dota2 2:i like playing dota2

提示: -n 参数会对 grep 命令找到的内容在开头加上对应的行号

1.3 -i 不区分大小写参数实践 grep "lol" test.txt >>> 找不到值 grep -i "lol" test.txt >>> LOL 1.4 -E 和 --color 的参数实践 # 默认不支持多条件匹配 grep "like|dota2" test.txt # 多条件匹配,加 -E grep -E "like|dota2" test.txt >>> dota2 i like playing dota2 # 加颜色 grep -Ei --color=auto "like|dota2" test.txt 1.5 -c 参数实践 grep "dota2" test.txt >>> dota2 i like playing dota2 # 只想计算匹配的字符串的数量 grep -c "dota2" test.txt >>> 2 1.6 -o 参数实践 # 注意这里没有 双引号 grep -o dota2 test.txt >>> dota2 dota2 1.7 -w 参数实践 grep -w "like" text.txt # 结果为空 1.8 grep 常用 # 查找指定进程 ps -ef | grep nginx # 查找指定进程并统计数量 ps -ef | grep -c nginx # 从文件中查找关键字 grep 关键字 test.txt # 从文件中查找关键字并输出它的行号 grep -n 关键字 text.txt # 从多个文件中查找关键字 grep 关键字 test1.txt test2.txt test3.txt # 从文件中查找关键字后,再从结果中找到指定关键字 cat text.txt | grep -v 不要的关键字 | grep -w 要的单词 ps -ef | grep dub-finance | grep -v grep | awk \'{print $2}\' | xargs kill -9 # 找出文件中的空白行 grep -n "^$" test.txt # 显示当前目录下面以 .txt 结尾的文件中的所有包含每个字符串至少有4个连续小写字符的字符串的行 grep -n \'[a-z]\{4\}\' *.txt 二、sed:字符流编辑器

语法格式

sed [选项] [sed内置命令字符] [输入文件]

说明:

sed以及后面的选项、命令和输入文件,每个元素之间都至少要有一个空格。

【sed内置命令字符】,既可以是单个命令,也可以是多个命令参数的组合

【输入文件】为sed 需要处理的文件,这是可选项,sed 还能够从标准输入如管道中获取输入

2.1 选项、内置命令说明

参数选项

参数选项 解释说明
-n   取消默认的sed的输出,常与sed内置命令的p连用  
-i   直接修改文件内容,而不是输出到终端。如果不使用 -i 选项,则sed只是修改内存中的数据,并不会影响磁盘上的文件  

sed内置命令字符

sed的内置命令字符 解释说明
a   全拼 append,表示追加文本,在指定行后添加一行或多行文本  
d   全拼 delete,表示删除匹配行的文本  
i   全拼 insert,表示插入文本,在指定行前添加一行或多行文本  
p   全拼 print,表示打印匹配行的内容,通常 p 会与选项 -n 一起使用  
s/regexp/replacement   匹配 regexp 部分的内容,用 replacement 替换 regexp 匹配的内容,regexp部分可以使用正则表达式,在 replacement 部分可以使用特殊字符 & 和 \1-\9等匹配 regexp 部分的部分内容。在实战场景中,s/regexp/replacement/g 结尾常与g匹配做全局的替换  
2.2 示例文本

先准备一个文本 tex.txt

101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CTO 2.3 在文本指定行后追加文本 sed "2a 106,dandan,CSO" test.txt >>> 101,oldboy,CEO 102,zhangyao,CTO 106,dandan,CSO 103,Alex,COO 104,yy,CFO 105,feixue,CTO

2a 106,dandan,CSO的意思:

2 表示对第 2 行进行操作,其他的行忽略

a 表示追加,2a 即在第 2 行后追加文本

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzspf.html