【问题标题】:Replace mixed escape sequences, control characters and literals with Sed?用 Sed 替换混合的转义序列、控制字符和文字?
【发布时间】:2011-10-04 21:37:12
【问题描述】:

我需要清理的数据转储中包含文字、可见和转义控制字符的奇怪组合(最好使用 sed),例如 ^A^B\N(字面意思)和可见的换行符。我需要清理文件以使可见的换行符保持不变,将每个 ^A 替换为制表符,并剥离每个 ^B\N^B\N (在每个 unix 时间值之后数据,例如 13068505731812510)。

这是在 shell 命令中使用less 的内容(在 shell 中,^A^B 字符有深色背景表示控制字符):

^A guid ^A unix-time ^B\N^B\N^A 4 ^A强> 192.168.21.136 ^A 7.0 ^A IE ^A 8 ^A guid ^A WinNT ^A ...(可见换行符)

或者一个字面的例子……

... ^A40C4595C-0B9D-46B7-8214-3D9CE2B5F057^A13071154505579551^B\N^B\N^A4^A192.168.21.136^A7.0^AIE^A8^AE6979203-F58B-4D20-9D66-7F5369BF9E32^AWinXP^A ...

到目前为止,我一直提供的转义序列 sed 并没有产生预期的输出。有谁知道在尽可能少的时间内完成这一切所需的魔法逃脱? (有很多文件,时间很重要。)谢谢!如果我可以在同一次传递中将 unix 时间数字转换为人类可读的时间,则可以加分。

【问题讨论】:

    标签: sed escaping control-characters


    【解决方案1】:

    将 ^A 更改为制表符:

    sed 's/\^A/'"$(printf '\011')"'/g'
    

    剥离我们的^B^N:

    sed -e 's/\^B\\N\^B\\N//g'
    

    【讨论】:

    • 有趣,我会尝试这些并报告。我没有成功尝试过sed 's/\^A/\t/g' - 知道为什么这不起作用吗?
    • 好的,到目前为止 sed 不与替换控制字符如 ^A 合作(或者如果是,至少使用 less 并不明显,我已经尝试过用 \t 和 printf 命令替换 ^A\^A\001
    • 我们需要查看一些版本号、OS、shell、sed?祝你好运。
    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2015-01-17
    • 2012-02-17
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多