例如,我在文本中有这样的引用组,如
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}
,{{ 1}},保持文本相同。
所以输出应该是
\cite{b.e.f}
答案 0 :(得分: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
以上使用GNU awk为第3个arg匹配()。如果你想做的就是将,
更改为.
只是:
$ 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}
鉴于您新发布的样本输入输出:
$ 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}.
仍在使用GNU awk,这次是多字符RS和RT。