Sed:仅在第一次出现的字符串中替换单词,直到最后一次匹配为止

时间:2014-04-28 06:06:17

标签: regex sed

我被困在我的剧本中的某一点。你能帮忙解决这个问题。

问题:有一个包含行的文件:

"<abc>-group ab:cd:ef +define_1 +DEFINE_2 </abc>"

现在我要从该文件中的所有行中删除-group ab:cd:ef。 我试过

%s/-group .* //g

但它将删除所有测试直到最后一个空格。并且新文本将成为<abc></abc>,因为我想要这样的内容:

<abc>+define_1 +DEFINE_2 </abc>

感谢。

3 个答案:

答案 0 :(得分:2)

使用sed

sed 's/-group [[:graph:]]* //' file

在vi / vim中:

%s/-group [[:graph:]]* //g

答案 1 :(得分:1)

使用awk

awk '{sub(/-group [^ ]* /,"")}1' file
"<abc>+define_1 +DEFINE_2 </abc>"

sed

sed -r 's/-group [^ ]* //' file
"<abc>+define_1 +DEFINE_2 </abc>"

答案 2 :(得分:0)

您应该将search & replace表达式更改为以下内容:

`%s/-group ab:cd:ef //g`

这将避免整行匹配。