2016-10-09 18 views
1

内部の一致文字は、私は、ラテックスファイルでこれらのAWK:キャプチャグループたとえば

Lorem ipsum \textbf{dolor} sit amet \cite{a,b,c,d,e}, consectetur adipiscing elit. In molestie urna et dui $\mu=\text{a b c}$ venenatis pretium. Duis sit amet metus orci \cite{a,b,c,d,e}. Nunc non lobortis arcu, sit amet imperdiet diam \cite{b,e,f}. 

のようなテキスト内の引用のグループを持っています。このような段落が多数存在することがあります。

私は別の文字に置き換える\citeコマンド内のすべてのコンマ,を一致させたい、同じテキストを保ち、全ての引用は\cite{a.b.c.d.e}\cite{b.e.f}になってきたために.と言ってみましょう。

ので、出力は

Lorem ipsum \textbf{dolor} sit amet \cite{a.b.c.d.e}, consectetur adipiscing elit. In molestie urna et dui $\mu=\text{a b c}$ venenatis pretium. Duis sit amet metus orci \cite{a.b.c.d.e}. Nunc non lobortis arcu, sit amet imperdiet diam \cite{b.e.f}. 
+1

あなたが 'sed '/ //./ g''を投稿した入力で、本当にあなたの本当のものを表すサンプル入出力を提供するためにあなたの質問をすべて編集する必要はありません入力。 –

+0

_一般的なケースでは、ラテックスマクロの引数リストで引数を区切るカンマと一致するには、完全なパーサーでも提供できるより洗練されていなければなりません。あなたは、火と忘れのない解決策のためにあなたの欲求を取り戻す必要があります。 – jthill

答えて

1

ご質問は不明であるが、これはあなたが望むものであるべきか?

$ awk -F, 'match($0,/\\cite\{([^\}]+)/,a) {$0=a[1]; for (i=1; i<=NF; i++) print NR, i, $i}' file 
1 1 a 
1 2 b 
1 3 c 
1 4 d 
1 5 e 
2 1 b 
2 2 e 
2 3 f 

上記の例では、match()に3番目の引数としてGNU awkを使用しています。それでもGNU AWK、マルチcharのこの時間を利用して

$ awk -v RS='[\\]cite[{][^}]+[}]' '{ORS=gensub(/,/,".","g",RT)} 1' file 
Lorem ipsum \textbf{dolor} sit amet \cite{a.b.c.d.e}, consectetur adipiscing elit. In molestie urna et dui $\mu=\text{a b c}$ venenatis pretium. Duis sit amet metus orci \cite{a.b.c.d.e}. Nunc non lobortis arcu. sit amet imperdiet diam \cite{b.e.f}. 

:新しく投稿サンプル入力出力を考えると

$ awk -F, 'match($0,/(.*\\cite\{)([^\}]+)(.*)/,a) {gsub(/,/,".",a[2]); $0=a[1] a[2] a[3]} 1' file 
\cite{a.b.c.d.e} 
\cite{b.e.f} 

:あなたがしたいすべてがちょうどだ.秒に,秒に変更された場合RSおよびRT。

+0

ありがとうございますが、カンマを処理したい(別の文字に置き換える)。私は再度質問を更新しました。 – Verbal

+0

'sed -E ':a; s /({[^、}] *)、/ \ 1./g; ta'' – jthill

+0

これは、OPが何を求めているのではなく、sedとはるかに簡単ですが、GNU sedは 'sed:-e expression#1、char 23:無効な先行正規表現'このコマンドを実行すると、awkがとにかく発明された1970年代に、sとg以外のsed構造体はすべて廃止されました。 –