2016-04-30 38 views
-1

我有一个名为tester.txt的sedfile包含此代码。使用正则表达式的Sed替换输出

s/\(\\ref\s*\) \(\w*,\) \(``\(\w*\s*\)*,\) \(.*\)/\1 ll\2 ll\3 dd\4/ 
/^\ref{A-Za-z}*/p 

当我在下面的文本上运行这些命令时,我得到了一些不正确的输出。我不明白为什么“好”的部分正在重复。 “。*”不应该与文本的其余部分相匹配吗?不知道为什么这会出现。任何帮助,将不胜感激。

输出:

\ref llthis, ll``is hard af alright, ddalright 

原文:

\ref this, ``is hard af alright, finally, 
+0

Backrefs通过其开括号编号。嵌套parens打开时增加数字。所以(ref)(w)(''(w))(。*)编号(1:ref)(2:w)(3:''(4:w))(5:。*) –

回答

0

在:

\(\\ref\s*\) \(\w*,\) \(``\(\w*\s*\)*,\) \(.*\) 

只算你的捕捉组:

1: \(\\ref\s*\) 
2: \(\w*,\) 
3: \(``\(\w*\s*\)*,\) 
4: \(\w*\s*\) 
5: \(.*\) 

的第四一个(以后引用作为\4)是第三酮(\3),因此重复的内部。你不告诉你实际所预期的输出得到所以这是一个猜测,但也许你想要的东西:而不是

\1 ll\2 ll\3 dd\5 

\1 ll\2 ll\3 dd\4 
+0

谢谢为此解释。这是非常有用的信息。干杯。 –