【问题标题】:Perl regex: replace all backslashes with double-backslashesPerl 正则表达式:用双反斜杠替换所有反斜杠
【发布时间】:2010-11-01 15:08:27
【问题描述】:

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

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

这个命令对我来说是suggested,但它不会导致 inputFile 发生任何变化(除了更新的时间戳)。认为问题可能是“\”没有被空格包围,我尝试了

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

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

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

这也没有效果。我知道我的文件包含“@​​987654328@”,例如在以下行中:

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

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

这里有什么明显的错误吗?我注意到的一件事是,尽管 inputFile 的大小约为 10MB,但该命令的返回速度非常快。

【问题讨论】:

    标签: regex perl


    【解决方案1】:

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

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

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

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

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

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

    perl subber.pl file1 ...
    

    【讨论】:

      【解决方案2】:

      怎么样,它应该用两个 \s 替换所有 \。

      s/\\/\\\\/g
      

      【讨论】:

      • 你做 \ 是转义字符,所以 \\ 被视为文字 \
      【解决方案3】:
      perl -pi -e 's/\\/\\\\/g' inputfile
      

      将全部替换到一个文件中

      【讨论】:

      • 哦,inputfile 可以是一个模式,这样可以一次性修改所有文件
      【解决方案4】:

      这个

      s/\\/\\\\/g 
      

      为我工作

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

      不要使用

      .\\.
      

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

      【讨论】:

        【解决方案5】:
        perl -spi.bak -e 's/.\\./\\\\/gm;' inputFile
        

        也许? 你为什么打那个前导 /?

        【讨论】:

          【解决方案6】:

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

          希望我没有分心,但 Windows 已经很长时间没有与 DOS 一起提供了。我认为 ME(大约 1999/2000 年)是最后一个版本,它仍然带有 DOS 或构建在 DOS 上。自 XP(一种 DOS 模拟)以来,“命令”shell 由 cmd.exe 控制,但在命令 shell 中运行 perl 单行程序的影响可能仍与在 DOS shell 中运行它们相同。也许有人可以验证这一点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多