Linux下sed的各种使用场景

索引
取出某行
插入到某行
删除某行
将某行具有aaa关键字的一行里的bbb关键字替换为ccc
sed在匹配字符串的串前和串尾添加内容
sed删除括号以及括号里面的内容

约定

当前行,某行:都指当前行
行首:一行的开头
行尾:一行的结尾
行前:一行的上一行
行后:一行的下一行
串前:字符串的第一个字符前
串后:字符串的最后一个字符后

取出某行

取出第二行$ sed -n '2p'
取出最后一行$ sed -n '$p'

插入到某行

$ cat test 
hello
world
hell
  • i在第2行前插入
$ sed '2i\BBBB' test
hello
BBBB
world
hell
  • a在第2行后插入
$ sed '2a\BBBB' test
hello
world
BBBB
hell
  • 最后一行插入
$ sed '$a\BBBB' test
hello
world
hell
BBBB

删除某行

  • 删除第N行
    sed -i 'Nd' filename
  • 删除N~M行
    sed -i 'N,Md' filename
  • 删除最后一行sed -i '$d' filename

将某行具有aaa关键字的一行里的bbb关键字替换为ccc

$ cat test  
aaabbbccc
aaaccc
bbbccc
$ cat test|sed '/aaa/s/bbb/ccc/g'
aaacccccc
aaaccc
bbbccc

下面将具有aaa行的bbb替换为ccc,再把具有aaa行的ccc替换为ggg。可以看到,第一个替换为ccc后,第二个规则又把ccc替换ggg了。

cat test|sed '/aaa/{s/bbb/ccc/g;s/ccc/ggg/g;}'
aaagggggg
aaaggg
bbbccc

sed在匹配字符串的串前和串尾添加内容

$ cat test          
hello
world
hell

字符前

$ cat test|sed  's/hello/123&/' test
123hello
world
hell

$ cat test|sed  's/llo/123&/' test
he123llo
world
hell

$ cat test|sed  's/^.*ell/123&/' test
123hello
world
123hell

字符尾

$ cat test|sed  's/^.*ell/&123/' test
hell123o
world
hell123

$ cat test|sed  's/world/&123/' test
hello
world123
hell

sed删除括号以及括号里面的内容

  • 删除所有的括号
$ echo "1)2(3(4)5" | sed 's/(//g;s/)//g'
12345
  • 替换括号(成对)和里面的内容
$ echo "(adb)11234(*sd)()" | sed 's/([^)]*)/^-^/g'
^-^11234^-^^-^

$ echo "(adb)11234(*sd)()bbbbb(())" | sed 's/([^)]*)/^-^/g'
^-^11234^-^^-^bbbbb^-^)
posted @ 2021-03-04 14:43  骨灰级划水菜鸟  阅读(546)  评论(0编辑  收藏  举报