📜  sed 从头到尾匹配 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:47:21.519000             🧑  作者: Mango

使用 sed 从头到尾进行匹配

在 shell 脚本中,sed 命令通常用于对文本进行编辑和转换,其中包括对文本中的字符串进行查找和替换。在本文中,我们将看到如何使用 sed 分别从头到尾,对文本进行查找和替换操作。

从头到尾匹配

要在 sed 中从头到尾匹配文本,需要使用 sed 命令的第一个参数进行正则表达式匹配。在正则表达式中,使用字符 '^' 表示从行首开始匹配。例如,要查找以单词 'Hello' 开头的行,可以使用以下命令:

sed -n '/^Hello/p' file.txt
  • '-n' 参数: 禁止打印匹配的行。
  • '/^Hello/p': 正则表达式,匹配以单词 'Hello' 开头的行,并打印结果。

有时候在进行行首匹配时,会因为字符串中包含空格而失败,这时候可以使用 '\b' 进行全单词匹配。例如,在下面的例子中,我们将查找以单词 'Hello' 开头的行,其中 'Hello' 与其后面的字母之间没有空格:

sed -n '/\bHello/p' file.txt
  • '/\bHello/p': 正则表达式,匹配以单词 'Hello' 开头但不包含空格的行,并打印结果。

在 sed 中,使用 '$' 表示行尾,我们可以使用它来从行尾开始匹配。例如,在以下示例中,我们将查找以单词 'world' 结尾的行:

sed -n '/world$/p' file.txt
  • '/world$/p': 正则表达式,匹配以单词 'world' 结尾的行,并打印结果。

在有些情况下,行尾可能会包含空格或其他非字母数字字符,这将使行尾匹配失败。在这种情况下,可以使用一些其他的字符类或限定符来进行匹配。在以下示例中,我们将查找以单词 'world' 结尾的行,正则表达式使用了特殊字符 \W ,表示匹配非字母数字字符:

sed -n '/world\W*$/p' file.txt
  • '/world\W*$/p': 正则表达式,匹配以单词 'world' 结尾并包含任意非字母数字字符的行,并打印结果。
替换匹配文本

在 sed 中,可以将文本中的字符串替换为其他字符串。要替换从头到尾匹配的字符串,必须先定义正则表达式,然后使用替换命令将其替换为指定的字符或字符串。例如,在以下示例中,我们将所有以单词 'Hello' 开头的行替换为 'Hi':

sed 's/^Hello/Hi/' file.txt
  • 's/^Hello/Hi/': 正则表达式,匹配所有以单词 'Hello' 开头的行,并用 'Hi' 替换它们。

在替换字符串时,sed 还提供了一些特殊字符和限定符,可以在替换字符串的过程中使用。例如,在以下示例中,我们将在字符串 'you' 后面插入一个感叹号:

sed 's/you/you!/g' file.txt
  • 's/you/you!/g': 正则表达式,匹配所有包含字符串 'you' 的实例,并在后面插入一个感叹号。
总结

在本文中,我们学习了如何在 sed 中从头到尾匹配文本。我们看到了如何使用 '^' 和 '$' 正则表达式字符来匹配行首和行尾,以及如何在匹配过程中使用字符类和限定符。我们还看到了如何使用替换命令将匹配的字符串替换为其他字符或字符串。