我们如何在 linux 中使用 sed 命令从开始删除文本到某些特定选定的单词

Muh*_*lah 5 command-line bash sed

我有一个与 linux 中的选择和替换文本相关的简单查询。我正在使用sed命令。我有以下文字:

你好世界,我只是用于显示的简单文本。

现在我想打印到“hello world”,只有我可以在 linux 中使用以下命令来完成。

echo "hello world, I am just simple text for display." | sed 's/, I am.*//g'
Run Code Online (Sandbox Code Playgroud)

现在我想要完全反转这个函数,我怎样才能通过使用一个简单的命令来删除“hello world”,就像sed.

所需输出:

,我只是简单的文字展示。

我更喜欢使用 linux 命令(sed等)。

Ben*_*oit 7

要反转命令的效果并保持要匹配的字符串的相同部分(假设这是字符串的唯一修复部分,并且您想要摆脱任何其他可能不同的部分),您可以执行以下操作:

echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)/\1/g'
Run Code Online (Sandbox Code Playgroud)

结果 :

, I am just simple text for display
Run Code Online (Sandbox Code Playgroud)

正则表达式在做什么:

  • ^.* : 匹配字符串开头的任何字符,直到下一个表达式
  • \( & \) : 捕捉与中间表达式匹配的字符串部分(必须用 \ 转义,否则它们将匹配括号字符)。
  • ,我是。*:你给我们的火柴,
  • \1 : 将替换为括号之间第一个子表达式的匹配结果

这样,您就可以使用与问题中的命令完全相反的效果,使用字符串的相同部分进行匹配。