在一组大文件中,我需要将所有出现的“\
”替换为“\\
”。我想将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。
答案 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中运行它们相同。也许有人可以验证。