【问题标题】:Replacing a delimiter替换分隔符
【发布时间】:2016-03-05 01:00:03
【问题描述】:

我有一个以^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|

【问题讨论】:

    标签: unix awk sed grep


    【解决方案1】:
    1. 如果您指的是 control-A 字符:

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

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

    【讨论】:

      【解决方案2】:

      如果您的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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        • 1970-01-01
        相关资源
        最近更新 更多