簡體   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