命令简介

sed 是一种流编辑器,用于执行基本的文本转换操作。它可以从文件或管道中读取输入,对输入的每一行进行指定的操作,然后将结果写入到文件或管道中。sed 命令非常强大,擅长进行文本替换、插入、删除等操作,在文本处理领域有着广泛的应用。

命令格式

sed 命令的基本语法格式如下:

1
sed [options] 'script' [file...]

其中:

  • options: 用于指定 sed 命令的选项,例如 -n 仅显示模式空间中的内容。
  • script: 指定要执行的命令序列,可以是一个简单的命令,也可以是一个脚本文件。
  • file…: 需要处理的一个或多个文件。如果不指定文件,sed 将从标准输入读取数据。

参数使用

sed 命令提供了多个可选参数,下表列出了常用的参数及其说明:

参数 说明 备注
-n 仅显示模式空间中的内容 -
-e 执行多个脚本命令 -
-f 从指定文件读取脚本命令 -
-i 直接修改原始文件 -
-r 使用扩展正则表达式 -

常用编辑命令

命令 说明 备注
a 在当前行后插入新行 后接要插入的内容
c 替换当前行 后接新的内容
d 删除模式空间匹配的行 -
i 在当前行前插入新行 后接要插入的内容
p 输出当前模式空间的内容 常与 -n 一起使用
s 用指定字符串替换匹配的内容 支持正则表达式

命令实例

基本用法

1
2
3
sed 's/pattern/replacement/' file.txt  # 替换文本中的模式
sed 'p' file.txt # 打印每一行内容
sed -n '5p' file.txt # 仅打印第 5 行

文本替换

1
2
3
sed 's/pattern/replacement/g' file.txt  # 全局替换模式
sed 's/pattern/replacement/2' file.txt # 仅替换每行的第二个模式
sed 's/\(pattern\)/\1/g' file.txt # 使用分组引用替换

插入和删除

1
2
3
4
sed '2a Text' file.txt  # 在第 2 行后插入文本
sed '2i Text' file.txt # 在第 2 行前插入文本
sed '2d' file.txt # 删除第 2 行
sed '/pattern/d' file.txt # 删除包含模式的行

编辑多个文件

1
2
sed -i 's/pattern/replacement/g' *.txt  # 直接修改多个文件
sed -e 's/pattern1/replacement1/' -e 's/pattern2/replacement2/' file.txt # 执行多个脚本命令

与其他命令结合使用

1
2
cat file.txt | sed 's/pattern/replacement/g'  # 与管道结合使用
find . -name '*.txt' -exec sed -i 's/pattern/replacement/g' {} \; # 与 find 命令结合使用

扩展用法

1
2
3
sed = file.txt | sed 'N;s/\n/\t/'  # 将每两行合并为一行,以制表符分隔
sed -n '/pattern/{n;p}' file.txt # 打印包含模式的行及其后一行
sed '0,/pattern/d' file.txt # 删除文件开头到第一个模式出现之间的所有行

通过上述实例,你可以看到 sed 命令在文本替换、插入、删除以及与其他命令结合使用时的灵活应用。sed 命令功能强大,是一个非常实用的文本处理工具。

此外,sed 命令还有一些扩展用法,例如:

  1. 多行模式

    你可以使用 N 命令将下一行添加到模式空间中,从而处理多行数据。例如:

    1
    2
    sed 'N;s/\n/ /' file.txt  # 用空格替换换行符,将每两行合并为一行
    sed '/pattern/{N;s/\n//}' file.txt # 删除匹配模式的行与其后一行之间的换行符
  2. 保留空间

    sed 提供了一个保留空间,可以用于临时存储模式空间的内容。例如:

    1
    2
    sed 'h;s/pattern/replacement/;x' file.txt  # 替换模式,并将原始内容存储在保留空间中
    sed 'g;s/pattern/replacement/' file.txt # 使用保留空间中的内容替换模式
  3. 回写输出

    使用 W 命令,你可以将模式空间的内容写入到指定的文件中。例如:

    1
    sed '/pattern/W output.txt' file.txt  # 将包含模式的行写入到 output.txt 文件中
  4. 转换命令

    sed 提供了一些转换命令,用于执行特定的转换操作。例如:

    1
    2
    sed 'y/abcd/ABCD/' file.txt  # 将字符 a、b、c、d 转换为大写
    sed 'y/\\\//\//' file.txt # 将反斜线转换为正斜线
  5. 地址范围

    你可以使用地址范围来指定要应用命令的行。例如:

    1
    2
    sed '1,5d' file.txt  # 删除文件的前 5 行
    sed '/start/,/end/d' file.txt # 删除从 "start" 到 "end" 之间的行
  6. 替代命令
    sed 还提供了一些替代命令,用于执行特定的替换操作。例如:

    1
    2
    sed 'y/abc/def/' file.txt  # 将 a 替换为 d,b 替换为 e,c 替换为 f
    sed 's/\(pattern\)/\U\1/' file.txt # 将匹配的模式转换为大写

总之,sed 命令是一个功能强大的文本处理工具,不仅可以满足基本的文本替换、插入、删除需求,还提供了许多高级功能和扩展用法,值得你深入学习和掌握。