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