模式空间

  • 不编辑源文件
  • 仅对模式空间中的数据进行处理
  • sed [options] ‘Address(中间不需要空格)Command’ file(…)
  • sed 执行完成之后会打印模式空间的内容

Address(地址定界的表示法):

  1. StartLIne,Endline
    1,100 $表示最后一行
  2. /RegExp/
    /^root/ root字符串开头的行
  3. /pattern1/,/pattern2/
    第一次被1匹配的行开始,到第一次被2匹配的行结束
  4. LineNumber
    指定行
  5. StartLine, +N
    从指定行开始,向后的N行

Command:

  1. d 删除符合条件的行
  2. p 显示符合条件的行
  3. a \string: 在指定行后面追加新行
  4. i \string: 在指定行前面添加新行
  5. r FILE 将指定的文件的内容放到指定的行处
  6. w FILE 将指定范围的内容另存到指定的文件中

    复杂Command=>替换:

    s/pattern/string/(修饰符)
  7. 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
  8. s的分割符不仅限于/可以 s###/s@@@/ s$$$
  9. 后向引用:
    \1, \2 ```
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    4. &: 匹配到的串
    ###### 修饰符:
    - g:全局替换
    - i:忽略大小写
    ## Options
    1. -n 静默模式 不打印模式空间
    2. -i 直接修改源文件
    3. -e SCRIPT 可以同时执行多个脚本
    4. -f /PATH/TO/SED_SCRIPT
    5. -r 使用扩展的正则表达式
    ---
    ## Examples

sed ‘1,3d’ /etc/a.log
sed ‘/^\//d’ /etc/fstab
sed ‘/^\//p’ /etc/fstab
sed ‘/^\//a \#’ /etc/fstab
sed ‘2r /etc/issue’ /etc/fstab
sed ‘/oot/w /tmp/oot.txt’ /etc/fstab
sed ‘s/oot/OOT/‘ /etc/fstab
l..e=> l..er
// & 符号表示匹配到的字符串
sed ‘s/l..e/&r/‘ a.txt
// 后向引用 like=>liker love=>lover
sed ‘s/(l..e)/\1r/g’ a.txt
// like=>Like love=>Love
sed ‘s/l(..e)/L\1/g’ a.txt
```