sed 转义字符在大文件中不匹配

dMe*_*dia 2 linux sed regular-expression

例如,我有一个大(~180MB)的 xml 文件,其中包含一些错误的字符

<Data ss:Type="String">7402953^@</Data>
Run Code Online (Sandbox Code Playgroud)

^@部分应该被删除。应该完成的工作

sed -i 's/\^@//g' /tmp/large.xml
Run Code Online (Sandbox Code Playgroud)

但由于某些未知原因,如果字符串位于我的大型 xml 文件中,则它无法按预期工作。如果文件的大小只有几 KB,则sed可以完美运行。

它看起来像一个错误,但我认为不可能,因为任务很明显。我做错了什么?

Isk*_*tvo 5

从你的问题来看(因为没有例子),我会说^@在大文件中实际上不是两个字符(^@),而是那些不可打印的字符之一。

您可以使用Ctrl + v+在终端中输入该不可打印字符Ctrl + 2
使用在sed代替字符^@它应该是罚款。

还要删除转义序列,因为不可打印字符不需要它。