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^-^)