- 去除代码中的注释
dingmac@ubuntu:~$ echo -e "One\nTwo One\n#One\n//zhang" | sed -E 's@(//.*|#.*)@ ---- @'
- 打印出行数 类似wc -l
seq 129 | sed -n '$='
- 答应出前几行 head 10
seq 120 | sed '10 q'
- 打印出最后一行
seq 102 | sed -n '$p'
- 打印出最后5行
seq 102 | sed ':A;N;1,5bA;D'
- 打印出最后两行
seq 102 | sed 'N;$!D'
- 复制功能
seq 102 | sed 'w file1.txt'
- 实现grep -v
grep -v "Line #1" test.txt
sed -n '/Line #1/!p' test.txt
- tr 功能
echo "ABC" | tr "ABC" "abc"
输出abc
dingmac@ubuntu:~$ echo "abcazhangsan" | sed 'y/abc/ABC/'
ABCAzhAngsAn
dingmac@ubuntu:~$ echo "abcazhangsan" | tr "abc" "ABC"
ABCAzhAngsAn
- 实现cat -s 的功能去掉重复的 换行符
echo "zhansgan\n\n\tlisi\n" | cat -s
dingmac@ubuntu:~$ echo -e "zhansgan\n\n\n\tlisi\n" | sed -n '1s/^$//p;/./,/^$/! D;p'
MAC 注意点
不支持 e
echo 'a' | sed 'e date' 没有作用
{}
执行多个语句的时候{N;p;} 记得一定要写最后的;
查看下面例子
echo -e "zhansgan\n\nlisi" | sed '/./,/m/!D'
如果区间/./ 到 /m/ 开始区间找到了 结束的没有找到 name 一直到最后
echo -e “zhansgan\n\nlisi\n” | sed -n ‘N;$!D;p;’
解释如下
1
2
3
4
1 进入 2 进入 不是最后一行 删除第一行 pattern buffer 变成 2 然后 第三行进来 不是最后一行 删除第一行 pattern buffer 变成 3 最后到了第四行 进来 变成3\n4 没有删除 最后打印出来 2\3
最后建议 man sed 一下 查看一下文档