【发布时间】:2011-06-17 11:34:49
【问题描述】:
我有一个字符串
test:growTest:ret
而使用 sed 我只想删除 test: 来获取:
growTest:ret
我试过了
sed '0,/RE/s/^.*://'
但它只给了我
ret
有什么想法吗?
谢谢
【问题讨论】:
我有一个字符串
test:growTest:ret
而使用 sed 我只想删除 test: 来获取:
growTest:ret
我试过了
sed '0,/RE/s/^.*://'
但它只给了我
ret
有什么想法吗?
谢谢
【问题讨论】:
将您的正则表达式 ^.*: 修改为 ^[^:]*:
您所需要的只是.* 构造不会占用您的分隔符——冒号。为此,请将matching-any-char . 替换为负括号:[^abc],它匹配任何指定的字符。
另外,不要混淆^ 这两个抑扬符,因为它们有不同的含义:第一个匹配字符串的开头,第二个表示否定括号。
【讨论】:
如果我理解您的问题,您希望像 test:growTest:ret 这样的字符串变成 growTest:ret。
你可以使用:
sed -i 's/test:(.*$)/\1/'
i 表示就地编辑。
s/one/two/ 将出现的 one 替换为 two。
所以这用“\1”替换了“test:(.*$)”。其中 \1 是第一组的内容,这是正则表达式在大括号内匹配的内容。
"test:(.*$)" 匹配第一次出现的 "test:",然后将其他所有内容放在大括号中,直到行尾。大括号的内容在 sed 命令之后保留。
【讨论】:
sed: -e expression #1, char 16: invalid reference \1 on s'命令的 RHS`。
sed -i 's/test:\(.*$\)/\1/'吗?即选择器(和)总是需要一个 \ 反斜杠前缀。
^.*: 将匹配test:growTest: 而不是test:。【讨论】: