代码之家  ›  专栏  ›  技术社区  ›  Odrade

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

  •  2
  • Odrade  · 技术社区  · 17 年前

    在一组大文件中,我需要替换所有出现的“ \ “与” \\ “.我想为此目的使用Perl。现在,我有以下工具:

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

    suggested 对我来说,它不会改变inputFile(除了更新的时间戳)。认为问题可能是“ \ “s没有被空格包围,我试着

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

    同样,这对文件没有影响。最后,我想我可能缺少了一个分号,所以我尝试了:

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

    这也没有效果。我知道我的文件包含“ \

    ("C:\WINDOWS\system32\iac25_32.ax","Indeo audio)
    

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

    6 回复  |  直到 9 年前
        1
  •  8
  •   Jonathan Leffler    17 年前

    在命令行中处理反斜杠的难点是知道有多少进程将操纵命令行,以及它们的引用规则是什么。

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

    你似乎在Windows上,在那里,你需要处理DOS命令“shell”。

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

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

    这应该能解决问题——另存为“subber.pl”,然后运行:

    perl subber.pl file1 ...
    
        2
  •  1
  •   Copas    17 年前

    这个怎么样?它应该把所有\替换为两个\。

    s/\\/\\\\/g
    
        3
  •  1
  •   Reverend Gonzo    17 年前
    perl -pi -e 's/\\/\\\\/g' inputfile
    

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

        4
  •  1
  •   whatsisname    17 年前

    s/\\/\\\\/g 
    

    对我有用

    不要使用

    .\\.
    

    否则,它将丢弃文件中\之前和之后的所有内容

        5
  •  0
  •   alamar    17 年前
    perl -spi.bak -e 's/.\\./\\\\/gm;' inputFile
    

    你为什么打那个标题/?

        6
  •  -1
  •   user118435    17 年前

    您似乎使用的是Windows,并且 在那里,你有DOS命令 “壳”要处理。

    希望我没有吹毛求疵,但Windows已经很久没有带DOS了。我认为ME(大约1999/2000)是最后一个仍然随DOS一起发布或基于DOS构建的版本。自XP以来,“命令”shell由cmd.exe控制(一种DOS模拟),但在命令shell中运行perl单行程序的影响可能仍然与在DOS shell中运行它们相同。也许有人可以证实这一点。