Perl正则表达式:用双反斜杠替换所有反斜杠

Odr*_*ade 2 regex perl

在一组大文件中,我需要\用" \\" 替换所有出现的" ".我想将Perl用于此目的.现在,我有以下内容:

perl -spi.bak -e '/s/\\/\\\\/gm' inputFile
Run Code Online (Sandbox Code Playgroud)

我向你建议了这个命令,但是它导致inputFile没有变化(更新的时间戳除外).考虑到问题可能是\"s"没有被空白包围,我试过了

perl -spi.bak -e '/s/.\\./\\\\/gm' inputFile
Run Code Online (Sandbox Code Playgroud)

同样,这对文件没有影响.最后,我以为我可能会丢失一个分号,所以我尝试了:

perl -spi.bak -e '/s/.\\./\\\\/gm;' inputFile
Run Code Online (Sandbox Code Playgroud)

这也没有效果.我知道我的文件包含" \",例如在以下行中:

("C:\WINDOWS\system32\iac25_32.ax","Indeo audio)
Run Code Online (Sandbox Code Playgroud)

我不确定正则表达式是否存在问题,或者我调用Perl的方式是否有问题.我对正则表达式有基本的了解,但对于Perl来说,我是一个绝对的初学者.

这里有什么明显的错误吗?我注意到的一件事是命令返回得很快,尽管inputFile的大小约为10MB.

Jon*_*ler 8

在命令行中处理反​​斜杠的困难部分是知道有多少进程要操作命令行 - 以及它们的引用规则是什么.

在Unix上,在任何shell下,您显示的第一个命令行都可以工作.

你似乎在Windows上,在那里,你有DOS命令'shell'来处理.

我会将替换放入一个文件并将其传递给Perl:

#!/bin/perl -spi.bak
s/\\/\\\\/g;
Run Code Online (Sandbox Code Playgroud)

这应该做的 - 保存为'subber.pl',然后运行:

perl subber.pl file1 ...
Run Code Online (Sandbox Code Playgroud)