【发布时间】:2015-08-16 11:24:35
【问题描述】:
我正在尝试将_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)
【问题讨论】:
-
发布一些示例输入和所需的输出,我们不应该破译这个正则表达式:)
-
你的第二个正则表达式是
_.*,而第一个是_*.。重大变化! -
是因为
[^_]。去掉它。你真的需要它吗? -
@Vincent 我的第一个正则表达式在我复制时是拼写错误,我的问题仍然存在。
-
@stribizhev,我想我知道了,我还能怎么做呢?否则在上面的例子中
four_lm1_hi(5:0)将被替换。不过,否定在第一个命令中起作用。
标签: regex linux unix replace sed