----来源于网络整理
1)sed: stream editor 流编辑器的缩写;
2)sed命令用来处理文件内容的行数据。与awk相对应(awk是处理列数据)
3)语法上与vi中的语法很像;
4)sed 默认支持basic正则,所以,有的字符需要转义,比如()
如果想不转义,,需要添加-r 参数; sed -r ..........
5)命令真正反映在文件中,需要添加 -i 参数,不加i参数,只是在屏幕上会显示改变后的结果,但文件中并没有改变。
6)-n 参数,静默输出,将非打印内容屏蔽
7)-e 指定不同的替换命令,比如同时有多个替换命令。
1)sed 参数 ‘脚本语句’ 待操作文件 ------>脚本语句格式 /pattern/action ---->pattern 是正则表达式action是编辑动作
2)sed 参数 -f ‘脚本文件’ 待操作文件
ps:使用单引号和双引号都行。
a,append 追加------------>相当于在行的下一行添加行
i, insert 插入----------------->相当于在行的上一行添加行
d,delete 删除
s,substitution 替换
示例:
1)sed '3a hello' test.sh ----->在第3行追加 hello----->只会在屏幕中显示,并没有真正改变文件
2)sed -i '3a hello' test.sh ---->真正改变文件 --->添加 -i参数 ,结果会反应到文件中。
3)sed '3i world' test.sh ------->在第3行前面添加一行world,未加-i 参数,不会反应到文件
4)sed '3d' test.sh ------->删除第3行,未加-i 参数,不会反应到文件
5)sed '3,6d' test.sh ------->删除第3-6行,未加-i 参数,不会反应到文件
6)sed 's/echo/printf/g' test.sh ------->将echo替换为printf /g表示如果一行有多个echo,则全部替换
------sed '/echo/s/echo/printf/g' test.sh --------->实际上可以这么写,先找到ehco所在行,然后,使用printf替换echo,这样就与 /pattern/action 格式一致了,第一种形式是这种形式的简写。
7)sed 's/echo/--&--/g' test.sh ------->将echo替换为--echo-- /g表示如果一行有多个echo,则全部替换
8)sed 's/([0-9])([0-9])/-\1-~\2~\g' test.sh ---->将连续的两个数字(也可以是多个数字)中第1个数两边添加-,第2个数两边添加~ ------>
或者 sed -r 's/echo/--&--/g' test.sh --->&是占位符,代替前面的echo.
9)sed 's/echo/printf/g;s/hello/world/g' test.sh ------------->同时替换多个字符串 (不用-e的话,用分号隔开)或者
sed -e 's/echo/printf/g' -e 's/hello/world/g' test.sh ------------->同时替换多个字符串
10)sed -n '/hello/p' tesh.sh ----------》将包含hello串的行打印出来。---->-n参数表示输出静默,不想打印的内容就不显示了。
不写n参数的话,hello会显示两遍,其他的内容也会显示。
11)sed '/hello/d' test.sh ----》删除包含hello的行,要反应到文件中加 -i参数
12)去掉html中的带<> 的部分
<html><head><title>hello world</title></head>
<body>welcome to the world of regexp</body></html>
方法:将带<>的部分替换成空
sed 's/<.*>//g' test.html 发现所有字符都变为空了,
正则表达式有贪心算法,数量限定符会匹配尽可能长的字符串,也就是说*将从<html>中的h一直匹配到了</html>中的l ;
正确写法:
sed 's/<[^<>]*>//g' test.html
