📜  sed 从匹配中替换 - Shell-Bash (1)

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

sed 从匹配中替换

sed 是一款基于文本流的文本编辑器,可以用于从命令行或脚本中修改指定文件或标准输入流的文本内容。在本文中,我们将讨论如何使用 sed 从匹配的行、单词或字符中进行替换。

替换指定行中的文本

要在指定行中替换文本,可以使用以下命令格式:

sed 's/old_text/new_text/' filename

该命令将查找文件 filename 中包含 old_text 的行,并将其替换为 new_text。请注意,该命令只替换每行中的一次出现。如果你想替换所有出现,必须在正则表达式中添加全局标志 g,命令格式如下:

sed 's/old_text/new_text/g' filename
替换行中指定位置的文本

要替换行中指定位置的文本,可以使用以下命令格式:

sed 's/\(start_text\).*\(end_text\)/\1new_text\2/' filename

该命令将查找每行中包含 start_textend_text 的文本,并将 start_textend_text 之间的文本替换为 new_text

请注意,该命令中的 \1\2 表示正则表达式中用于定义位置的分组。例如,\(start_text\) 表示分组 1,\(end_text\) 表示分组 2。

替换指定字符的某些文本

要替换指定字符的某些文本,可以使用以下命令格式:

sed 's/old_text/new_text/flags' filename

其中 flags 表示替换标志,可以是以下任何组合:

  • i:忽略大小写。
  • g:替换所有出现。
  • n:仅在与正则表达式匹配的行上进行替换。
  • p:仅打印与正则表达式匹配的行。
  • w file:将替换的行写入指定的文件中。
  • e:将替换的表达式作为 shell 命令进行评估。

例如,要替换文件 filename 中所有包含 old_text 的行中的 old_textnew_text,可以使用以下命令:

sed 's/old_text/new_text/g' filename
替换指定单词的某些字符

要替换指定单词的某些字符,可以使用以下命令格式:

sed 's/\bword\b/new_word/g' filename

该命令将查找单独的 word,并将其替换为 new_word。请注意,该命令中的 \b 表示单词的边界。如果你想在单词的前后匹配其他字符,可以简单地删除 \b

结论

现在,你已经了解了如何使用 sed 从匹配中进行替换。 sed 是一款非常强大的工具,可以大大简化文本处理任务,因此我们建议你花些时间学习它的更多用法。