sed命令

sed命令

  流编辑器,以行为单位进行编辑;

  sed编辑文件但不改变原文件;

  sed命令有模式空间(PATTERN),文件按行的的形式传入模式空间进行处理

 1、常见选项

  -n  // 拒绝默认显示

  -r  // 指定使用拓展的正则表达式

  -e 脚本  // for while if

  -f  // 指定脚本文件

  -l  // 指定文件换行长度

  -i  // 直接修改文件内容(一般情况下不用使用)

2、地址定界方式

  21直接匹配数值

    sed -n ‘5,7p’ 文件  // 匹配57

  22 d ~ 步长

    Sed -n ‘1 ~ 3p’ 文件

  23 $ 指定行尾.代表光标所在当前行,可以用来vim的多行注释)

    Sed -n ‘10,$p’ 文件

  24 /正则/

    /pattern1/,/pattern2/   /正则1//正则2/ 第二种模式

  例:
    sed
-n '/k{5,}/,$p' abc     sed -n '/(fd)+/,+2p' abc

  250addr

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

例:
    sed -n '0,/k{5,}/p' abc

  26 addrN

     配置addr行到addr后N行

例:    
    sed -n '/fd/,+5p ' abc

3、*常见命令

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

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

    sed “/aaa/i A” a

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

    sed “/bbb/a B” c

  c  // 替换行

    sed “/aaa/c A” a

  d  // 删除

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

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

  *s*  // 文本内容替换,默认替换模式空间匹配到第一项(语法格式:s/需要替换的/替换后的/)

   g  // s一起用可以全部替换

  &  // 在字符串内容中应用pattern匹配到内容

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

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

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

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

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

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

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

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

 

原文地址:https://www.cnblogs.com/yxq-123/p/11379652.html