在一组大文件中,我需要将所有出现的“\
”替换为“\\
”。为此,我想使用 Perl。现在,我有以下内容:
perl -spi.bak -e '/s/\\/\\\\/gm' inputFile
这个命令是 suggested对我来说,但它不会导致 inputFile 发生任何变化(除了更新的时间戳)。认为问题可能是“\
”没有被空格包围,我尝试了
perl -spi.bak -e '/s/.\\./\\\\/gm' inputFile
同样,这对文件没有影响。最后,我想我可能少了一个分号,所以我试了一下:
perl -spi.bak -e '/s/.\\./\\\\/gm;' inputFile
这也没有效果。我知道我的文件包含“\
”,例如以下行:
("C:\WINDOWS\system32\iac25_32.ax","Indeo audio)
我不确定正则表达式是否有问题,或者我调用 Perl 的方式是否有问题。我对正则表达式有基本的了解,但在 Perl 方面我绝对是个初学者。
这里有什么明显的错误吗?我注意到的一件事是尽管 inputFile 的大小约为 10MB,但该命令返回得非常快。
最佳答案
在命令行中处理反斜杠的困难部分是了解有多少进程将要操作命令行 - 以及它们的引用规则是什么。
在 Unix 上,在任何 shell 下,您显示的第一个命令行都可以使用。
您似乎在 Windows 上,并且有 DOS 命令“shell”要处理。
我会将替换放入一个文件并将其传递给 Perl:
#!/bin/perl -spi.bak
s/\\/\\\\/g;
这应该可以解决问题 - 另存为“subber.pl”然后运行:
perl subber.pl file1 ...
关于regex - Perl 正则表达式 : replace all backslashes with double-backslashes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972490/