[英]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.