仅替换与sed匹配正则表达式的第一个出现

时间:2011-01-28 20:08:18

标签: regex sed

我有一个字符串

test:growTest:ret

使用sed我只会删除test:获取:

growTest:ret

我试过

sed '0,/RE/s/^.*://'

但它只给了我

ret

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:5)

将正则表达式^.*:修改为^[^:]*:

你需要的只是.*构造不会消耗你的分隔符 - 冒号。要执行此操作,请将匹配任意字符.替换为否定括号:[^abc],以匹配除之外的任何字符

另外,不要混淆两个回旋^,因为它们有不同的含义:第一个匹配字符串的开头,第二个意味着否定括号。

答案 1 :(得分:1)

如果我理解了您的问题,您希望test:growTest:ret之类的字符串成为growTest:ret

您可以使用:

sed -i 's/test:(.*$)/\1/'

意味着就地编辑。

s / one / two /用 two 替换 one 的出现。

因此,将“test:(。* $)”替换为“\ 1”。其中\ 1是第一组的内容,这是正则表达式在大括号内匹配的内容。

“test:(。* $)”匹配“test:”的第一次出现,然后将其他所有内容放到行的末尾直到大括号。在sed命令之后,大括号的内容仍然存在。

答案 2 :(得分:1)

  1. Sed使用饥饿的比赛。因此^.*:将匹配test:growTest:以外的test:
  2. 默认,sed只替换第一个匹配的模式。所以你不需要特别做任何事情。