替换分隔符

时间:2016-03-04 16:28:47

标签: unix awk sed grep

我有一个^A作为分隔符的文件:

8bf9f1897035297fb7b0767e4e5e191b2c93ceb^AAustralia^A2016-01-13 05:19:06^A
8bf9f1897035297fb7b0767e4e5e191b2c93ceb^AAustralia^A2016-01-13 05:19:06^A
8bf9f1897035297fb7b0767e4e5e191b2c93ceb^AAustralia^A2016-01-13 05:19:06^A

如何使用awk或sed替换|分隔符?

期望的输出:

8bf9f1897035297fb7b0767e4e5e191b2c93ceb|Australia|2016-01-13 05:19:06|
8bf9f1897035297fb7b0767e4e5e191b2c93ceb|Australia|2016-01-13 05:19:06|
8bf9f1897035297fb7b0767e4e5e191b2c93ceb|Australia|2016-01-13 05:19:06|

2 个答案:

答案 0 :(得分:2)

  1. 如果您指的是控制字符:

    • 以下内容适用于GNU和非GNU sed:sed 's/\x01/|/g'
    • 可能更快tr '\001' '|'
  2. 如果您指的是双字符序列^A

    • sed 's/\^A/|/g'
    • 在awk中你可以使用gsub( /\^A/,"|" )

答案 1 :(得分:1)

如果您的sed版本是GNU sed,则可以使用GNU Extensions for Escapes in Regular Expressions,特别是:

`\cX'
     Produces or matches `CONTROL-X', where X is any character.  The
     precise effect of `\cX' is as follows: if X is a lower case
     letter, it is converted to upper case.  Then bit 6 of the
     character (hex 40) is inverted.  Thus `\cz' becomes hex 1A, but
     `\c{' becomes hex 3B, while `\c;' becomes hex 7B.

那就是:

sed -e "s/\ca/|/" < input.txt