繁体   English   中英

Perl单线重复替换

[英]Perl one-liner repeat substitution

我要重复此搜索,直到文本中没有可用的匹配项为止:

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>实例数各不相同。

对于第一个,这不是“搜索”,这是“替代”,第二个是,您不需要while循环,从而使“ perl一个衬里​​”读出每一行。

但是您可以使用->'s / foo / bar / i的“ if语句”,如果m / foo / i'或类似的想法,例如ternare if-then-else,但是这不是必需的。 我将首先使用标志“ -p”而不是“ -i”(不是“ -pi”)进行检查,以首先检查输出。

例:

 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

祝好运。

这工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM