我想重复此搜索,直到文本中没有可用的匹配项:
perl -pi -e 's/(<langSet xml.lang=....>)\s*<tig>(.*?)<\/tig>\s*<tig>/\1<tig>\2<\/tig>\1<tig>/g' iate.dsl
基本上,我需要一个单线程形式的while循环,这将使线条看起来有点像这样
<langSet...><tig>...</tig><tig>...</tig><tig>...</tig><tig>...</tig>
并返回类似这样的内容
<langSet...><tig>...</tig><langSet...><tig>...</tig><langSet...><tig>...</tig><langSet...><tig>...</tig>
其中<tig>
个实例的数量因每行而异。
答案 0 :(得分:0)
对于第一个这不是&#34;搜索&#34;,这是&#34;替换&#34;而第二个想法是,你不需要一个while循环,导致一个衬里&#39;读出每一行。
但你可以使用&#34; if-statement&#34;喜欢 - &gt; &m; foo / i&#39;或类似的想法,就像ternare if-then-else但是,没有必要。我会先用旗帜&#34; -p&#34;进行检查。没有&#34; -i&#34; (不是&#34; -pi&#34;),先检查输出。
示例:
perl -p -e 's/(<langSet xml.lang=....>)\s*<tig>(.*?)<\/tig>\s*<tig>/\1<tig>
\2<\/tig>\1<tig>/g if m/(<langSet xml.lang=....>)\s*<tig>(.*?)<\/tig>
\s*<tig>/gi' iate.dsl
祝你好运。
答案 1 :(得分:0)
这有效:
perl -p -i -e 's/(<langSet xml.lang=....>)\s*<tig>(.*?)<\/tig>\s*<tig>/\1<tig>\2<\/tig>\1<tig>/g while m/(<langSet xml.lang=....>)\s*<tig>(.*?)<\/tig>\s*<tig>/gi' iate.dsl