【发布时间】: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