Chinaunix

标题: awk替换字符 [打印本页]

作者: xiaoxiao_不想吃药    时间: 2015-01-26 15:47
标题: awk替换字符

比如文档中有一行:msg:QQLive;string:“|00 01 03|”,我想要的结果是msg:QQLive;string:“\0x00\0x01\0x03”,就是在00,01,02前面都添加上\0x,怎么办啊?
作者: 聆雨淋夜    时间: 2015-01-26 16:00
如果只有一行编辑就可以了
作者: xiaoxiao_不想吃药    时间: 2015-01-26 16:08
回复 2# 聆雨淋夜
不是一行,有很多行。

   
作者: Shell_HAT    时间: 2015-01-26 16:14
  1. echo 'msg:QQLive;string:"|00 01 03|"' | sed 's/[0-9]\+/\\0x&/g'
复制代码

作者: liion631818    时间: 2015-01-26 16:22
不是转成这样?
\x00\x01\x03
xiaoxiao_不想吃药 发表于 2015-01-26 15:47
比如文档中有一行:msg:QQLive;string:“|00 01 03|”,我想要的结果是msg:QQLive;string:“\0x00\ ...

作者: A_Traveler    时间: 2015-01-26 16:26
本帖最后由 A_Traveler 于 2015-01-26 16:36 编辑

echo 'msg:QQLive;string:"|00 01 03|"'|awk '{gsub(/[0-9]+/,"\\0x&");gsub(/[\| ]/,"")}1'
作者: jason680    时间: 2015-01-26 16:32
回复 1# xiaoxiao_不想吃药

$ awk -F'|' -vOFS="" '/string:/{gsub("^| ","\\0x",$2)}1' FILE
msg:QQLive;string:"\0x00\0x01\0x03"

   
作者: xiaoxiao_不想吃药    时间: 2015-01-26 16:36
回复 6# A_Traveler
不是这样的,我举得例子,是数百条里其中的一个,再举一条:msg:pps;string1:“|07 0a 0b 05|”;string2:“|00 01|”;end:“pps2015”,有数百条这样的,只替换其中两个 ||之间的部分


   
作者: dn833    时间: 2015-01-26 18:47
继续等LZ挤牙膏,等把所有条件都说完再搞
作者: zxy877298415    时间: 2015-01-26 18:50
  1. awk -F '[| ]+'   '{for (i=1;i<=NF;i++) if($i!~/"/) {$i="\\0x"$i;printf $i}  else {printf $i}print ""}' file
  2. msg1m~Zpps1m~[string1:"\0x07\0x0a\0x0b\0x05";string2:"\0x00\0x01";end:"pps2015"
  3. msg:QQLive;string:"\0x00\0x01\0x03"

  4. cat file
  5. msg1m~Zpps1m~[string1:"|07 0a 0b 05|";string2:"|00 01|";end:"pps2015"
  6. msg:QQLive;string:"|00 01 03|"
复制代码
回复 1# xiaoxiao_不想吃药


   
作者: jcdiy0601    时间: 2015-01-27 10:00
awk -F"[| ]" '{print $1"\\0x"$2"\\0x"$3"\\0x"$4$5}' test
作者: 我是一隻羊    时间: 2015-01-28 10:46
sed -r 's/([| ])([0-9a-z]{2})/ \\0x\2/g;s/\|”/”/g' inputfile
作者: 我爱你我的菜    时间: 2015-09-10 11:14
echo 'msg:QQLive;string:“|00 01 03|"'| sed -r 's#[\| ]([0-9]{2})\|?#\\0x\1#g'




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2