2016-04-30 39 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

謝謝爲此解釋。這是非常有用的信息。乾杯。 –