Regex替换记录中的最后n个分隔符

vlf7wbxs  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(154)

我有一个CSV文件,其中包含如下记录:

^Tablete Internet^|GoClever|^TAB I71^|^Tableta GoClever TAB I71, InfoTMIC iMAPx220 1GHz MKV, MOV, VOB, DAT, WMV, AVI, 3GP, MP4, RM, RMVB, FLV, MKV, MOV, VOB, DAT, WMV, MP3!WAV!OGG!FLAC!APE!AAC, Conectori: 1x mini jack 3.5 mm, 2 porturi USB 2.0, 4000 mAh lithium-ion polymer 3.7V^!92.00!USD!w!24!0!Link!!^5 ron^!!|
Group|Prod|Den|Description!12!EUR!^wait time^!160!Modified!Link!^Spec Obs^!^tv none^!more!info|

我需要替换最后10个“!“从行的末尾开始,并带有“|“所以最后它看起来像:

^Tablete Internet^|GoClever|^TAB I71^|^Tableta GoClever TAB I71, InfoTMIC iMAPx220 1GHz MKV, MOV, VOB, DAT, WMV, AVI, 3GP, MP4, RM, RMVB, FLV, MKV, MOV, VOB, DAT, WMV, MP3!WAV!OGG!FLAC!APE!AAC, Conectori: 1x mini jack 3.5 mm, 2 porturi USB 2.0, 4000 mAh lithium-ion polymer 3.7V^|92.00|USD|w|24|0|Link||^5 ron^|||
Group|Prod|Den|Description|12|EUR|^wait time^|160|Modified|Link|^Spec Obs^|^tv none^|other|info|

我试过:

sed 's/!\([^\^!]*\)!\([^!]*\)$/|\1|\2/'

但这仅替换最后2次出现的“!“.如果我尝试

sed 's/!\([^\^!]*\)!\([^!]*\)!\([^!]*\)$/|\1|\2\3/'

它不符合任何...那我该怎么做呢
谢谢!

iih3973s

iih3973s1#

我知道这不是最优雅的解决方案,但我设法做到了:

perl -npe 's/^(.*)!(.*)!(.*)!(.*)!(.*)!(.*)!(.*)!(.*)!(.*)!(.*)!(.*)$/$1|$2|$3|$4|$5|$6|$7|$8|$9|$10|$11/'

谢谢!

相关问题