如何使用二进制数据在unix中gsub awk

时间:2016-09-08 01:54:40

标签: bash unix awk

如何gsub awk包含二进制字符的文件,如"< 85>"这种情况会让我的程序崩溃。

我使用cat

这样的代码
cat $filename | awk '{gsub("<85>",RS);print}' > somedir/sometxtfile.txt

这不会对包含二进制字符的文件(如此文件

)起作用
ISA*00*          *00*          *01*157322272      *ZZ*00116520M      *160907*1830*^*00403*000005354*0*P*><85>GS*PO*157322272*00116520M*20160907*1830*000005354*X*004030VICS<85>ST*850*0001<85>BEG*00*RE*7570006859**20160907<85>CUR*BY*USD<85>REF*IA*5164<85>REF*DP*595*ELECTRONICS             F<85>PER*BD*JILL MAYNARD<85>ITD*******45<85>DTM*001*20160919<85>DTM*037*20160912<85>N1*ST**92*51<85>PO1*1*14*EA*29.38*QT*UP*753048155606*VA*T54281E4BLK/GRY*IT*T54281E4*IN*12693802*BO*Orange*IZ*NO SIZE<85>CTP*RS*RES*59.99<85>PID*F****2015IMSLK5/ORANG/NSIZE/NDIMN<85>PO4*1<85>SDQ*EA*92*105*1*157*1*186*1*234*1*283*1*414*2*426*1*464*1*626*1*672*1<85>SDQ*EA*92*1012*1*1030*1*1083*1<85>PO1*2*14*EA*23.66*QT*UP*753048179756*VA*T40941E4*IT*T40941E4*IN*12693812*BO*Grey*IZ*NO SIZE<85>CTP*RS*RES*49.99<85>PID*F****2015EXPFUL/GREY/NSIZE/NDIMN<85>PO4*1<85>SDQ*EA*

1 个答案:

答案 0 :(得分:2)

让我们创造那个角色:

$ awk 'BEGIN {print "A \x85 B"}' > foo

less为例查看:

$ less foo
A <85> B
foo (END)

删除它:

$ awk 'sub(/\x85/,"X")' foo
A X B