sed '2d' filename # 删除第2行
sed '2!d' filename # 删除第2行以外的所有行
sed '1,2d' filename # 删除第1、2行
sed '2,+1d' filename # 删除第2行及后面的一行
sed '1~3d' filename # 从第1行开始,每隔3行删除一行
sed '$'d filename # 删除最后一行
sed '/^$/d' filename # 删除空行
sed '/aaa/d' filename # 删除匹配 aaa 的行
sed '/aaa\|bbb/' filename # 删除匹配 aaa 或者 bbb 的行
sed '1,10{/aa/d}' filename # 删除 1~10 行匹配 aa 的行
sed '/aaa/,$d' filename # 删除匹配 aaa 行到最后一行
sed '/^#/d;/^$/d' filename # 删除注释行和空行
sed -i '/[:blank:]*#/d' filename # 删除一个或多个空格加 # 号的行
3、插入新行
# a:插入当前行的后面一行, i:插入当前行的前面一行, c:更改行
sed 'atest' filename # 在每一行后面插入 test 行
sed '2atest' filename # 在第2行后面插入 test 行
sed '2!atest' filename # 在除了第2行的每一行后面插入 test 行
sed '/hello/atest' filename # 在匹配行后面插入 test
sed '$atest' filename # 在最后一行后面插入 test
4、替换操作
sed 's/aaa/bbb/' filename # 替换所有行中第一个 aaa 为 bbb
sed 's/aaa/bbb/2' filename # 替换所有行中第二个 aaa 为 bbb
sed 's/aaa/bbb/g' filename # 替换所有的 aaa 为 bbb
sed '1,10s/aaa/bbb/g' filename # 替换第1行~第10行所有的 aaa 为 bbb
sed 's/^[0-9]/(&)/' filename # 将数字加上一个(), &为匹配到的内容
sed "/ccc/{s/aaa/bbb/g;q}" # 匹配ccc,并且把含有ccc的行中 aaa 都替换成 bbb, {}里可以执行多个命令,用;隔开即可,q是退出
5、多个 sed 命令组合
sed -e "2d" -e "s/last/new/" # 删除第二行,并且匹配把last替换成new
6、引用变量
sed -i "s/$old_str/$new_str/" filename
sed -i s/$old_str/$new_str/ filename
sed -i 's#'''$old_str'''#'''$new_str'''#g' file # 当变量中存在特殊字符/,将/改为#
7、合并文本两行为一行
sed -n '{N;s/\n/\t/p}' test.txt
8、过滤多了200b字符文件
vim查看文件,发现多了<200b>字符,使用/200b搜索匹配不上;
grep 200b 也匹配不上
sed 's/\xe2\x80\x8b//g' inputfile
linux中sed在指定字符前后添加内容
假设文档内容如下:
[root@localhost ~]# cat /tmp/input.txt
null
000011112222
test
要求:在1111之前添加AAA,方法如下:
sed -i 's/指定的字符/要插入的字符&/' 文件
[root@localhost ~]# sed -i 's/1111/AAA&/' /tmp/input.txt
[root@localhost ~]# cat /tmp/input.txt
null
0000AAA11112222
test
要求:在1111之后添加BBB,方法如下:
sed -i 's/指定的字符/&要插入的字符/' 文件
[root@localhost ~]# sed -i 's/1111/&BBB/' /tmp/input.txt
[root@localhost ~]# cat /tmp/input.txt
null
0000AAA1111BBB2222
test