[英]replacing column field separator using sed
我有一个文本文件1.txt:
cam:45c62741b9c99e1dcf3c140e8e3df635::dv:johnybold@yahoo.com:83.228.32.24
gamer:3dabd5bd7984b0286eba52d4a7db2dea:$Wm?1Z3MPErXl7%yk^Pc#%iu\9LFc{:octopus@vida.tv:93.182.154.63
:adc0a54f8d21694848200ae043fa99f2:GqJ:LOLPELIC@trash-mail.com:84.176.127.30
! Aa:da99417e29ab0aa67f97db64f091836b:k_P:prus_da@yahoo.com:82.179.236.154
我想将列分隔符(当前为':')更改为'|| o ||'。 我只想更改第一,第三和第四列分隔符,因为第二列包含类似hash:salt
。
我正在尝试的脚本是:
sed 's/:/||o||/1;s/:/||o||/2;s/:/||o||/2' 1.txt
唯一的问题是结果中的盐中包含“:”。 我得到的输出是:
cam||o||45c62741b9c99e1dcf3c140e8e3df635:||o||dv||o||johnybold@yahoo.com:83.228.32.24
gamer||o||3dabd5bd7984b0286eba52d4a7db2dea:$Wm?1Z3MPErXl7%yk^Pc#%iu\9LFc{||o||octopus@vida.tv||o||93.182.154.63
||o||adc0a54f8d21694848200ae043fa99f2:GqJ||o||LOLPELIC@trash-mail.com||o||84.176.127.30
! Aa||o||da99417e29ab0aa67f97db64f091836b:k_P||o||prus_da@yahoo.com||o||82.179.236.154
输出的第一行是错误的。
Expected output :
cam||o||45c62741b9c99e1dcf3c140e8e3df635::dv||o||johnybold@yahoo.com||o||83.228.32.24
其余的输出是正确的。
我期望的是从正向替换第一':',第二次从后向替换,因此盐中的':'被忽略。
简短的sed
解决方案:
sed -E 's/:+/||o||/3g; s/:/||o||/' file
输出:
cam||o||45c62741b9c99e1dcf3c140e8e3df635::dv||o||johnybold@yahoo.com||o||83.228.32.24
gamer||o||3dabd5bd7984b0286eba52d4a7db2dea:$Wm?1Z3MPErXl7%yk^Pc#%iu\9LFc{||o||octopus@vida.tv||o||93.182.154.63
||o||adc0a54f8d21694848200ae043fa99f2:GqJ||o||LOLPELIC@trash-mail.com||o||84.176.127.30
! Aa||o||da99417e29ab0aa67f97db64f091836b:k_P||o||prus_da@yahoo.com||o||82.179.236.154
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.