shell之路 Linux正则工具【第二篇】文本处理三剑客之sed
作用
查找或修改符合模式匹配规则(pattern)的所有行
命令格式
第一种形式:sed [option] "pattern command" file
第二种形式:stdout | sed [option] "pattern command"
常用选项
-n 只打印模式匹配行 -e|; 多条命令 -r 支持扩展正则表达式 -i 直接修改文件内容
sed -n '/pattern/p' f 打印匹配的行 sed -i∶直接修改读取的文件内容,而不是由屏幕输出 sed 'm,ns/keyword1/keyword2/g' f 替换(m,n)行(/分隔符可为其它如#) sed -r 's/(keyword1)(keyword2)/g' f s代表替换,g代表替换一行的所有 sed -n '/keyword1/p;/keyword2/p' f sed -n -e '/keyword1/p' -e '/keyword2/p' f
sed中的pattern详解
匹配模式 含义 10command 匹配到第10行 10,20command 匹配从第10行开始到第20行结束 10,+5command 匹配从第10行开始到第16行结束 /pattern1/command 匹配到pattern1的行 /pattern1/,/pattern2/command 匹配到pattern1的行开始 10,/pattern1/command 到匹配到pattern2的行结束匹配从第10行开始 /pattern1/,10command 到匹配到pettern1的行结束匹配到pattern1的行开始,到第10行匹配结束
pattern用法:
1、LineNumber ----直接指定行号
sed -n "17p" file 打印file文件的第17行
2、startLine , EndLine ---指定起始行号和结束行号
sed -n "10,20p" file 打印file文件的10到20行
3、startLine, +N ---------------指定起始行号,然后后而N行
sed -n "10,+5p" file 打印file文件中 从第10行开始,往后面加5行的所
4、/pattern1/ ----正则表达式匹配的行
sed -n "/^root/p" file 打印file文件中以root开头的行
5、/pattern1/,/pattern2/ -------从匹配到pattern1的行, 到匹配到pattern2
sed -n "/^ftp/ ,/^mai1/p" file 打印fi1e文件中第一个匹配到以ftp开头的行,到第二行
6、LineNumber , /pattern1/ ----从指定行号开始匹配,直到匹配到pattern1
sed -n "4,/^hdfs/p" file 打印file文件中从第4行开始匹配,直到以hdfs开头的行
7、/pattern1/,LineNumber --从pattern1匹配的行开始,直到匹配到指定行
sed -n "/root/ ,10p" file 打印file文件中匹配root的行,直到第10行结束
sed中的编辑命令详解
查询(常用):
1、P ----------打印
删除:
2、d ----------删除
增加:
3、a ---------匹配到的行后追加内容
4、i ----------匹配到的行前追加内容
5、r ---将后面指定文件的内容追加到匹配到的行后面
6、w ----------将匹配到的行内容另存到其他文件中
修改(常用):
7、 s/pattern/ string/ -----------查找并替换,查找符合pattern模式的字符串,将其
s/pattern/ string/g -----------g表示全 部行内全部匹配
s/pattern/ string/2g -----------2g表示,同一行内,只替换前2个匹配的,剩下的
s/pattern/string/ig ------------加i参数表示匹配时忽略大小写,g表示匹配到的:
其他编辑命令:
8、= --显示行号
什么是反向引用?
&和\1 引用模式匹配到的整个串
sed "s/l..e/&r/g" file 在file中搜寻以1开头,然后跟两个任意字符,以e结尾的字符串
sed "s/\(1..e\)/\1r/g" file 和上面实现- ~样的功能,使用\1代表搜寻到的字符串.\
上面两种方式实现了一样的功能,分别使用&和\1引用前面匹配到的整个字符串
两者区别在于&只能表示匹配到的完整字符串,只能引用整个字符串;而\1可以使用()对匹配到的字符串
例如:如果我们仅想要替换匹配到的字符串的一~部分,name必须使用\1这种方式,不能使用&。
查找test. txt文件中以1开头,紧接着跟两个任意字符,再接一个e的字符串。将找到的字符串中开头的
sed "s/1\(. .e\) /L\1/g" test. txt
案例
查找


替换
不修改原文件并输出

修改原文件

谢谢

浙公网安备 33010602011771号