📜  sed 全部替换,直到匹配到行 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:34:54.065000             🧑  作者: Mango

在Shell中使用'sed'命令进行全局替换

'sed'是一个在Shell编程中非常常用的命令之一。它可以用来全局替换文本内容,也可以用来对文本进行过滤和转换。本文将介绍如何使用'sed'命令进行全局替换,同时提供一些常见的用法示例。

命令语法

'sed'命令的语法如下:

sed [选项] 'script' [文件]

其中,选项可以是以下任意组合:

  • -n:只输出经过'script'处理后的结果。
  • -i:直接修改文件内容。
  • -e:允许在'script'中使用多个命令。
  • -r:启用正则表达式。
  • -f:从文件中读取'script',并对给定文件逐行处理。

'script'是一个sed脚本,由多个命令组成,每个命令用分号';'分隔。'sed'命令会从文件或标准输入中读取内容,并对其应用它所包含的命令序列,最后将结果输出到标准输出或文件中。如果不指定文件名,则'sed'命令将从标准输入中读取内容。

搜索与替换

要使用'sed'命令进行全局搜索和替换,需要使用's'命令。这个命令的语法如下:

s/要替换的字符串/新的字符串/g

其中,'g'表示要替换所有匹配的字符串。如果不加'g',则只替换每行的第一个匹配项。下面是一个示例:

$ echo "Hello World!" | sed 's/World/Shell/g'
Hello Shell!

这个命令将字符串中的'World'替换为'Shell'。

如果要对文件进行修改,则需要添加'-i'选项:

$ sed -i 's/World/Shell/g' myfile.txt

上面的命令将myfile.txt文件中的'World'替换为'Shell'。

常见用法示例

下面是一些常见的'sed'命令用法示例。

删除空行
$ sed '/^$/d' myfile.txt

这个命令将myfile.txt文件中的所有空行删除。

删除行尾空格
$ sed 's/\s\+$//' myfile.txt

这个命令将myfile.txt文件中每行的行尾空格删除。

提取匹配行
$ sed -n '/regex/p' myfile.txt

这个命令将myfile.txt文件中匹配正则表达式的所有行输出。

从第N行开始匹配
$ sed 'N,$d' myfile.txt

这个命令将myfile.txt文件中从第N行开始的所有行删除。

将匹配行替换为新行
$ sed 's/regex/newline/g' myfile.txt

这个命令将myfile.txt文件中匹配正则表达式的行替换为新行。

总结

本文介绍了如何使用'sed'命令进行全局替换,同时提供了一些常见的用法示例。通过这些示例,您可以更加熟悉'sed'命令的使用,并在Shell编程中更加顺畅地进行文件处理。