Shell - 如何在第n次出现管道后删除特定字符串

时间:2017-10-03 12:05:47

标签: linux bash shell unix sed

我有一个文件,其中包含管道分隔数据,我想删除此字符串" EES"在第17次出现管道后再将数据写回同一文件

以下是我要传递的输入

AMC|FRS|M|123456|01/30/1992|QWERT||WERTYU|OK|USA|74000|1234567|QQ|34567142|11/01/2011|12/31/9999|Y|V3EES|13

以下是我期待

的输出
AMC|FRS|M|123456|01/30/1992|QWERT||WERTYU|OK|USA|74000|1234567|QQ|34567142|11/01/2011|12/31/9999|Y|V3|13

感谢帮助,提前致谢!!!

2 个答案:

答案 0 :(得分:0)

以下awk应该会帮助你。

awk -F"|" '{sub("EES","",$18)} 1' OFS="|"   Input_file > temp_file && mv temp_file Input_file

说明:根据OP的Input_file将字段分隔符设置为|(管道),然后使用awk的替换实用程序sub,我提到在第18列中将字符串EES替换为NULL。提到1将打印行(编辑/未编辑的第18列)。在此处设置OFS(输出字段分隔符为|(管道))以获取|在输出中,然后提到Input_file。

答案 1 :(得分:0)

使用awk

awk  'BEGIN {FS=OFS="|"} {sub("EES","",$18); print}'  file 

使用grep& awk

egrep -o "[A-Z0-9a-z]*" file | awk '{if(NR==18){sub("EES","")}printf("%s|",$0)}'