Text-Processing

在文件中第一次和第二次出現模式之間用另一個模式替換模式

  • February 6, 2014

希望在第一次出現 y 到第二次出現 y 之間將逗號 (,) 替換為字母 u。下面給出了範例輸入文件。

100y00893225900,008932259,06,2013,NOKIA Q PHONE,TXS000000287356,PDF,Text,MEOB,1.4,00 00,DoD,07/07/2013,06/01/2013,06/30/2013,07/10/2024,trueyr=56734,d=199y
56734_199_0.pdf
100y00893225900,008932259,06,2013,SAMSUNG T PHONE,TXS000000287356,PDF,Text,MEOB,1.4,00 00,DoD,07/07/2013,06/01/2013,06/30/2013,07/10/2024,trueyr=56734,d=199y
56734_199_0.pdf      
100y00893225900,008932259,06,2013,APPLE S PHONE,TXS000000287356,PDF,Text,MEOB,1.4,00 00,DoD,07/07/2013,06/01/2013,06/30/2013,07/10/2024,trueyr=56734,d=199y
56734_199_0.pdf
~
~
~

實際上,每行都有 3 個“y”出現。

期望的輸出:

100y00893225900u008932259u06u2013uNOKIA Q PHONEuTXS000000287356uPDFuTextuMEOBu1.4u00 00uDoDu07/07/2013u06/01/2013u06/30/2013u07/10/2024utrueyr=56734,d=199y
56734_199_0.pdf
100y00893225900u008932259u06u2013uSAMSUNG T PHONEuTXS000000287356uPDFuTextuMEOBu1.4u00 00uDoDu07/07/2013u06/01/2013u06/30/2013u07/10/2024utrueyr=56734,d=199y
56734_199_0.pdf
100y00893225900u008932259u06u2013uAPPLE S PHONEuTXS000000287356uPDFuTextuMEOBu1.4u00 00uDoDu07/07/2013u06/01/2013u06/30/2013u07/10/2024utrueyr=56734,d=199y
56734_199_0.pdf
~
~
~
awk -Fy -v OFS=y '{gsub(",","u",$2); print}' file

這是一個 Perl 的,只是稍長一點:

perl -Fy -ane 'do{$F[1]=~s/,/u/g; $,="y";} if /y/; print @F;' file

引用自:https://unix.stackexchange.com/questions/113727