sed语句

sed命令

流编辑器  作为行编辑器对文本进行编辑(以行为单位进行编辑)

注意:sed编辑文件却不改变源文件;

工作原理:指定一个文本文件依次读取文本文件中每行的内容,读取到pattern space模式空间中,在模式空间中进行文本匹配(正则表达式)对匹配后的内容进行修改(s替换、d删除、p打印、修改、保存)。

常见选项

-n (取消自动打印模式空间)

-r 指定使用扩展表达式  所以不需要 |表示或者

-e 脚本 for while if

-l 指定“l”命令的换行期望长度

-f 指定脚本文件

-i 直接修改文件内容(不要使用)

地址定界方式

  1. 直接匹配数值   --sed -n’5,7p’ filename
  2. d~步长  --sed -n ‘1-3p’ filename
  3. $指定行尾    --sed -n’10,$p’filename
  4. /正则/

    /正则1/   /正则2/

    sed -n’/k{5,}/,$p’abc

    sed -n’/(fd)+/.7p’abc 正则写在前面就没有问题写在后面就有问题

    sed -n’

  5.0,addr

    addr可以为数字/$/正则表达式

    sed-n’0,/k{5,}/p’abc

  6.addr,+N

    配置addr行到,addrN

    sed -n ‘/fd/.+5p’abc

  7.vim.代表光标所在当前行:esc+.,$/^/#/---注释     esc+”:.,+3s/^#//”---取消注释     /pattren1/,/pattern2/从模式1匹配到的行到模式2匹配到的行   步长用~,例如1~3

  8.*常见命令

i 在匹配行的上一行添加指定的内容

     sed “/for/iabc”99cfb.sh

a 在匹配行的下一行添加指定的内容

sed “/for/aabc”99cfb.sh

p print 打印(默认在屏幕上显示出来)建议和-n一起使用

c 替换 sed”/aaa/cA”a

d 删除 sed”/aaa/d”a     sed “1,3d”a    sed”/for/d”99cfb.sh

n/N  读取/添加模式匹配到的行的下一行内容进行操作

w 保存文件内容到一个新的文件

     sed “/pattern/w 新的文件名”原来的文件名

    eg:sed”/k/w  /root/aabbcc”abc

s 文本内容替换,默认替换模式空间匹配到的第一项

    s/pattern/字符串/   中间的/可以替换为任意一个特殊字符

g 行内全局替换

1 2 和正则表达式相同实现反向应用;

& 调用前面匹配的内容

..表示任意一个字符

sed 高级应用:模式空间--hold space 占有空间

练习:

删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;

sed 's/^[[:space:]]+//g' /boot/grub/grub.conf

删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行   的行首的#和空白字符;

sed 's/^#[[:space:]]+//g' /etc/fstab

给定一个目录,取出其目录名

echo "/etc/passwd"  |  sed 's/[^/]+$//'

给定一个目录,取出其文件名

echo "/etc/passwd" | sed 's#^/.*/(.*)##

/var/log/message    

  sed '/[^/]+/' 

  dirname --  取出文件路径的路径部分

  basename  --  取出文件路径的文件名部分

原文地址:https://www.cnblogs.com/bishuyu/p/11397993.html