如何在 Linux 中使用 sed 命令删除从开头到某个特定选定单词的文本

如何在 Linux 中使用 sed 命令删除从开头到某个特定选定单词的文本

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

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

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

echo "hello world, I am just simple text for display." | sed 's/, I am.*//g'

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

所需输出:

,我只是简单的文字用于显示。

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

答案1

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

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

结果 :

, I am just simple text for display

正则表达式的作用是:

  • ^.* :匹配字符串开头的任意字符,直到下一个表达式
  • \( & \) :捕获字符串中与其间的表达式匹配的部分(必须用 \ 进行转义,否则它们将匹配括号字符)。
  • ,我是。*:你给我们的比赛,
  • \1 :将被括号内第一个子表达式的匹配结果替换

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

答案2

您可以使用sed选项s。命令将是,

echo "hello world, I am just simple text for display."|sed 's/.*, //g'

给出

I am just simple text for display.

解释

  • .*匹配任意数量的任意字符
  • ,<space>匹配和空格
  • 因此,该组合.*,<space>匹配 之前的所有内容以及空格(包括两者),并将其替换为任何内容。

答案3

$ echo "hello world, I am just simple text for display." | sed 's/^hello world//' , I am just simple text for display.

解释:在 sed 中(以及其他地方,如 vim 中),使用插入符号 ( ^) 表示行首。替换只会删除该文本。

相关内容