使用正则表达式

时间:2016-04-30 14:53:57

标签: regex linux sed

我有一个名为tester.txt的sedfile,其中包含此代码。

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,

1 个答案:

答案 0 :(得分:0)

在:

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

只计算您的捕获组:

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

第4个(后面称为\4)位于第3个(\3)内,因此重复。你没有显示你实际期望得到的输出所以这是一个猜测,但也许你想要:

\1 ll\2 ll\3 dd\5

而不是:

\1 ll\2 ll\3 dd\4