实践sed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ sed --help
用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

  -n, --quiet, --silent
                 取消自动打印模式空间
  -e 脚本, --expression=脚本
                 添加“脚本”到程序的运行列表
  -f 脚本文件, --file=脚本文件
                 添加“脚本文件”到程序的运行列表
  --follow-symlinks
                 直接修改文件时跟随软链接
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
  -l N, --line-length=N
                 指定“l”命令的换行期望长度
  --posix
                 关闭所有 GNU 扩展
  -E, -r, --regexp-extended
                 use extended regular expressions in the script
                 (for portability use POSIX -E).
  -s, --separate
                 consider files as separate rather than as a single,
                 continuous long stream.
      --sandbox
                 operate in sandbox mode.
  -u, --unbuffered
                 从输入文件读取最少的数据,更频繁的刷新输出
  -z, --null-data
                 separate lines by NUL characters
      --help     打印帮助并退出
      --version  输出版本信息并退出

如果没有 -e, --expression, -f--file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.

-i

用来编辑文件。

查找替换

1
2
3
4
# 第一个
$ sed -i 's/原字符串/新字符串/' file
# 全局
$ sed -i 's/原字符串/新字符串/g' file

特定行查找替换

1
$ sed -i '/匹配字符串/s/原字符串/新字符串/' file

特定行行前插入行

1
$ sed -i '/匹配字符串/i 新行字符串' file

特定行行后插入行

1
$ sed -i '/匹配字符串/a 新行字符串' file

删除特定行

1
2
3
$ sed -i '/匹配字符串/d' file
# 删除空行
$ sed '/^$/d' file

-E

abc.txt

1
c       e

测试

1
2
3
4
5
6
# 不成功,由于不支持+
$ sed -i '/c\s+e/a abc' abc.txt 
# 成功,由于支持+
$ sed -E -i '/c\s+e/a abc' abc.txt 
# 成功,由于支持*
$ sed -i '/c\s*e/a abc' abc.txt