我正在尝试将_out
附加到与下面的sed命令中显示的正则表达式匹配的任何内容中。 _out
应该在[ (]
之前。
sed -n '/[^_]lm[01?]_.*[ (]/p'
该命令正如我所期望的那样正确返回行。现在问题来自于我尝试以下命令,我在其中定义了要在替换中使用的区域。
例如,如果我匹配lm?_whatever(
,则应将其替换为lm?_whatever_out(
。
我用过
sed 's/\([^_]lm[01?]_.*\)\([ (]\)/\1_out\2/g' text_to_edit
正如你可能猜到我不走运。我做错了什么?
编辑:
这是一个解释更多的例子:
案文:
this will make absolutely no sense=lm?_hello <= four_lm1_hi(5:0) bla bla
lm1_blabbering(5:0)
应该变成
this will make absolutely no sense=lm?_hello_out <= four_lm1_hi(5:0) bla bla
lm1_blabbering_out(5:0)
答案 0 :(得分:4)
为了仅匹配您的lm
字词而不影响以下字词,您需要限制模式。我建议将.*
转为[^[:blank:]]*
以匹配 0或更多字符而不是空格或标签:
sed 's/\([^_]lm[01?]_[^[:blank:]]*\)\([ (]\)/\1_out\2/g' text_to_edit
(编辑)或者,如果_
和之间的唯一字符是字母数字字符,则可以使用
[[:alnum:]]
字符类:
sed 's/\([^_]lm[01?]_[[:alnum:]_]*\)\(.\)/\1_out\2/g' text_to_edit
这样,我们确保只匹配lm?_hello
和lm1_blabbering
。