sed
http://coolshell.cn/articles/9104.html
概述
sed  [options]  'command'  file(s) // 命令行直接执行
sed  [options]  -f scriptfile  file(s) //把命令写到脚本中
流编辑器,与普通的交互式编辑器如vi ,可以交互的接受键盘的命令,进行插入、删除和文本替换等操作。
而流编辑器则是在编辑数据之前,预先指定数据的编辑规则,然后按照规则将数据输出到标准输出。
在流编辑器的所有规则与输入的行匹配完毕后,编辑器读取下一行,重复之前的规则。处理完所有数据后,流编辑器停止。
因此,sed是面向行的,并且sed并不会修改文件本身,除非重定向存储输出。command为具体的文本编辑命令,而file为输入的条件
option
| option | 说明 | 
|---|---|
| -n | 默认sed处理一行之前会打印输入,-n不打印输入 | 
| -i | 对文件进行修改 | 
| -e | 指定命令(默认可不写),可组合 -e command1 -e command2,也可-e command1;command2 | 
| -f | 脚本文件 | 
定址
command中首先要定址,你要告诉sed你希望处理的行,
- 可以是
数字,或者模式(首次匹配,可多次),区间以逗号分隔line1,line2,line,/pattern/,/pattern1/,/pattern2/ - 无则处理所有行
 
command
| command | 说明 | 
|---|---|
i\  | 
      匹配行的上一行添加 | 
a\ | 
      匹配行的下一行添加 | 
c\  | 
      将匹配行替换为目标行 | 
d | 
      将匹配航删除 | 
s/pattern_old/new/g | 
      将匹配行替换,g处理该行所有匹配,无处理第一个,3g处理第三个之后的所有(vi中必须指定需要更换的行(%所有行),不指定默认是当前行) | 
    
p | 
      输出 | 
特殊字符
| 字符 | 说明 | 
|---|---|
^ | 
      匹配行首 | 
$ | 
      匹配行尾 | 
. | 
      匹配某个字符 | 
| & | 可用来代表匹配的字符 | 
例子
sed "s/my/Hao Chen's/g" pets.txt
匹配pets.txt中所有行,将所有的my替换为Hao chen’s
sed -i "s/my/Hao Chen's/g" pets.txt
直接对pets.txt进行修改
sed  's/^/#/g' pets.txt
在pets.txt的行首添加#
sed  's/$/ --- /g' pets.txt
sed 'a\---' pets.txt
在pets.txt的行尾添加 —
sed 's/<[^>]*>//g' html.txt
去除html.txt中的标签
sed "3s/my/your/g" pets.txt
将pets.txt中的第三行的my替换为your
sed "3,6s/my/your/g" pets.txt
将pets.txt中的第三到六行my替换为your
sed 's/s/S/1' my.txt
将my.txt中的第一个s替换为S
sed 's/s/S/3g' my.txt
将my.txt中的第三个之后的s替换为S
sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt
sed -e '1,3s/my/your/g' -e ' 3,$s/This/That/g' my.txt
将my.txt中的第一到第三行的my替换为your,并将第三到最后一行的This替换为That
sed 's/my/[&]/g' my.txt
将my.txt中的my用中括号括起来。 可以用&来当作被匹配的变量
sed 'N;s/my/your/g' pets.txt
将pets.txt中的奇数行的my替换为your,N将下一行的内容纳入缓冲区来进行匹配
sed 'N;s/\n/,/' pets.txt
将pets.txt中的奇数行的换行符换成逗号
sed "1 i This is my monkey,my monkey's name is wukong" my.txt
在第一行之前插入This..
sed "1 a This is my monkey,my monkey's name is wukong" my.txt
在第一行之后插入
sed "$ a This is my monkey,my monkey's name is wukong" my.txt
在最后一行之前插入
sed "/fish/a This is my monkey,my monkey's name is wukong" my.txt
在匹配到fish的行后插入
sed "/my/ a --- " my.txt
在匹配到my的行后插入—
sed "2 c This is my monkey,my monkey's name is wukong" my.txt
第二行替换为This…
sed "/fish/ c This is my monkey,my monkey's name is wukong" my.txt
将匹配到fish的行,替换为This..
sed '/fish/ d' my.txt
将匹配到fish的行,删除/fish/d有没有空格都行
sed -n '/fish/p' my.txt
输出匹配到fish的行
sed '/fish/p' my.txt
打印输入,并输出匹配到fish的行
sed -n '/dog/,/fish/p' my.txt
输出匹配到dog和fish之间的行
sed -n '1,/fish/p' my.txt
输出第一行和匹配到fish之间的行
sed '3,6{/This/{/fish/d}}' pets.txt
删除第三到六行之间的既包含This,又包含fish的行
sed '/This/d;s/^ *//g' pets.txt
sed '1,${/This/d;s/^ *//g}' pets.txt
将包含this的行删除,并将行首空格删除
sed '=' access.log
显示行号,类似的还有
vi 中输入:set nu
cat -n xx.log
- 上一篇 idea调试技巧
 - 下一篇 负载均衡算法(notes)