我有一个简单的查询,与在 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 中),使用插入符号 ( ^
) 表示行首。替换只会删除该文本。