2016-04-30 9 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は、その開口部の括弧によって番号が付けられています。ネストされた括弧は、開いたときに番号を増やします。ありがとうございました。(参考になりました)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番目のもの(\4と後で参照されます)は3番目のもの(\3)の内側にあります。あなたが実際にそれは推測だが、多分あなたが望む得るために期待されるものを出力表示されません。

\1 ll\2 ll\3 dd\5 

の代わり:

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

この説明のために。これは非常に有用な情報です。乾杯。 –