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

时间:2009-06-09 21:02:30

标签: regex perl

在一组大文件中,我需要将所有出现的“\”替换为“\\”。我想将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。

6 个答案:

答案 0 :(得分:8)

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

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

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

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

#!/bin/perl -spi.bak
s/\\/\\\\/g;

这应该可以解决问题 - 保存为'subber.pl',然后运行:

perl subber.pl file1 ...

答案 1 :(得分:1)

它应该用两个\替换所有\。

s/\\/\\\\/g

答案 2 :(得分:1)

perl -pi -e 's/\\/\\\\/g' inputfile

将在一个文件中替换所有这些

答案 3 :(得分:1)

s/\\/\\\\/g 

适合我

你在正则表达式开头的替换标志前面有一个叛徒

不要使用

.\\.

否则它将在文件

中删除\之前和之后的任何内容

答案 4 :(得分:0)

perl -spi.bak -e 's/.\\./\\\\/gm;' inputFile

可能? 你为什么键入那个领先/?

答案 5 :(得分:-1)

  

您似乎在Windows上,并且   在那里,你有DOS命令   “贝壳”要处理。

希望我没有分裂,但Windows已经很长时间没有使用DOS了。我认为我(大约1999/2000)是最后一个版本仍然带有DOS或建立在DOS上。 “命令”shell由cmd.exe控制自XP(一种DOS模拟),但在命令shell中运行perl one-liner的影响可能仍然与在DOS shell中运行它们相同。也许有人可以验证。