【问题标题】:escape the 'escape' value of the Last escape slash in a file转义文件中最后一个转义斜杠的“转义”值
【发布时间】:2014-02-12 21:52:50
【问题描述】:

我有一个由 \001 或 ^A 字符分隔的数据文件。所以数据看起来是这样的

1234^A This is Ma Baker ^A Gimme all your money ^A \0000123\^A 

我想搜索 ^A 模式,它实际上类似于 ASCII 中的 \001 我可以使用这样的东西。我可以管理以下例如

 sed e/string / substitute 
    \M\a\B\a\k\e\r\s\h\g\a\v\e   |  sed -e 's_\\_\\\\_g' 

但我不知道如何搜索 ^A 字符(我不能正常使用 Cat 或 view 看到它),我只需要找到 ^A 之前的那些反斜杠。所以这里发生的事情是 - 向处理文件的命令发送了一条错误消息,以忽略 ^A 作为分隔符(当分隔符前面是反斜杠时),而事实上它必须得到尊重。所以我需要像上面一样双重转义反斜杠以删除它的“转义”属性并将其视为文字

【问题讨论】:

  • 所以你想在一个文件中找到最后一个八进制 1 \001 并用什么替换它?
  • 你不能只是假设某些东西被转义了。它比这更复杂。 'this\\s' 不是 escape 。它是一个逃逸加一个s。 'Thi\\\\\\s' 也不是。然而,'Th\\\\\s' 是。 (?<!\\)(?:\\\\)*(\\(?!\\).) 是一个正确的正则表达式,可以找到任何转义的东西。
  • Thx.say 我有这个文件Sam^ATom^AMary\^AJane^A,分隔符是^A。因此文件拆分为 Sam Tom Mary Jane 。很好,但在 Jane 之前有一个 \^A。该 \ 实际上是数据的一部分,但该序列转义了 ^A 。所以现在同一个文件被分割为Sam Tom MaryJane .Delimiter 在 Mary 和 Jane 之间被忽略。我想捕捉这种情况并用 \\^A 转义 \^A。所以在此之后文件看起来像 Sam Tom Mary\ Jane

标签: regex shell sed awk delimiter


【解决方案1】:

您可以使用此 sed 匹配转义的 ^A 并对其进行双重转义:

sed 's~\\\x01~\\&~g'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2012-04-29
    • 2015-09-21
    • 2011-11-09
    • 2017-04-21
    相关资源
    最近更新 更多