sed - stream editor for filtering and transforming text
流编辑器的过滤和转换文本
sed [-nerf] [动作]
参数:
-i 修改源文件 危险
-e 直接在命令行模式上执行sed的动作编辑
-f 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作
-r :使用扩展的正则表达式
-n 静默模式,默认的sed中所有来自stdin的数据一般都会被列出到屏幕上,但如果加上-n之后,则只有经过sed特殊处理的那一行才会被列出来。
[[email protected] tmp]# sed "/^a/p" sed.txt //将以”a“开头的行打印出来,可以看到b也被打印出来了,并且a被打印了两遍,一遍是sed默认就是将模式空间中的内容打印出来,第二遍是p参数又打印了一遍 a a b [[email protected] tmp]# sed -n "/^a/p" sed.txt //使用-n参数,只讲匹配到的内容打印出来 a [[email protected] tmp]#
动作说明:[n1,n2] function
1.LineNumber
精确匹配的行
2.StarLine, +N
从startline开始,到之后的n行结束,一共是n+1行
3.StartLine,EndLine
$ 表示最后一行
[[email protected] tmp]# sed -n "1,2p" /etc/passwd //打印1-2行的内容 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [[email protected] tmp]# sed -n "30,\$p" /etc/passwd //答应30到最后一行的内容 mysql:x:502:502::/home/mysql:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin [[email protected] tmp]# sed -n "30p" /etc/passwd //打印第30行的内容 mysql:x:502:502::/home/mysql:/sbin/nologin
4./匹配模式/ 支持正则表达式
如:/^root/
5./partern/,/partern/
第一次被partern1匹配到的行开始,至第一次被partern2匹配到的行结束, 这中间的所有行
[[email protected] tmp]# sed -n "/bash$/p" /etc/passwd //打印以bash结尾的行 root:x:0:0:root:/root:/bin/bash along:x:501:500::/home/along:/bin/bash [[email protected] tmp]# sed -n "/^rpc/p" /etc/passwd //打印以rpc开头的行 rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin [[email protected] tmp]# sed -n "/^\(.*\)root/p" /etc/passwd //打印以任意字符开头,中间有root的行 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [[email protected] tmp]#
function
d:删除符合条件的行
p:打印符合条件的行
使用此命令的话,指定的内容会打印两次,这是因为sed命令默认的就是 将模式空间中的内容打印出来,而p也是打印的意思,所以会重复打印
a \string : 在指定的行后面追加新的行,内容是string
a的意思append追加的意思,即在指定行的后边追加内容
[[email protected] tmp]# cat sed.txt a b [[email protected] tmp]# a="c" //设置一个变量a [[email protected] tmp]# sed "2a $a" sed.txt //在第二行后边追加变量a的值 a b c [[email protected] tmp]# sed "2a \$a" sed.txt //特殊符号需要转义 a b $a [[email protected] tmp]#
i \string: 在指定的行前面添加新的行,内容是string
”i“就是insert的意思
[[email protected] tmp]# cat sed.txt a b [[email protected] tmp]# sed ‘1i 1‘ sed.txt //在指定行的前边添加一行 1 a b [[email protected] tmp]#
r File:将指定文件的内容添加至符合条件的行处
[[email protected] tmp]# cat sed.txt a d [[email protected] tmp]# cat sed1.txt b c [[email protected] tmp]# sed "2r ./sed1.txt" sed.txt //将sed1.txt的内容在sed.txt的第二行开始添加 a d b c [[email protected] tmp]#
w File:将指定范围的内容添加至指定的文件中去
[[email protected] tmp]# sed -n "30,\$w ./a.txt" /etc/passwd //将passwd文件的最后两行写入到a.txt文件中去 [[email protected] tmp]# cat a.txt mysql:x:502:502::/home/mysql:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin [[email protected] tmp]#
s /partern/string/修饰符 查找替换 默认只替换第一次被匹配到的字符串
修饰符:
g:全局替换
i:忽略大小写
不仅可使用s ///也可以使用s ### s @@@
s 命令也可以支持后向引用
&可以做替换用,但是并不适用与所有的情况
将“l”替换成“L”