sed 学习笔记

模式空间

  • 不编辑源文件
  • 仅对模式空间中的数据进行处理
  • 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
  10. & : 匹配到的串
修饰符:
  • g:全局替换
  • i:忽略大小写

Options

  1. -n 静默模式 不打印模式空间
  2. -i 直接修改源文件
  3. -e SCRIPT 可以同时执行多个脚本
  4. -f /PATH/TO/SED_SCRIPT
  5. -r 使用扩展的正则表达式

Examples

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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