【问题标题】:Replacing a character from a file by Perl script用 Perl 脚本替换文件中的字符
【发布时间】:2014-09-24 14:48:22
【问题描述】:

我正在尝试使用 perl 脚本在文本文件中将 windows 行结束符 \r\n 替换为 linux 样式行结束符 \n。我在脚本中写的内容如下:

system("perl -pi -e s/\r\n/\n/g input.txt");

由此产生的警告是:

替换模式未在 -e 第 1 行终止

如果我知道此命令的错误之处,我会很高兴。

编辑:当我使用时:

system("perl -pi -e 's/\r\n/\n/g' words.txt");

我收到了这个警告:

在 -e 第 1 行的 EOF 之前的任何地方都找不到字符串终止符“'”

提前致谢。

【问题讨论】:

    标签: perl


    【解决方案1】:

    分离系统调用的参数。这将帮助您避免使用正确的引用和转义:

    system('perl', '-i', '-pe', 's/\r\n/\n/g', 'input.txt');
    

    但是,我建议只使用$INPLACE_EDIT

    my $file = 'input.txt';
    
    local @ARGV = $file;
    local $^I = '';
    while (<>) {
        s/\R/\n/;
        print;
    }
    

    【讨论】:

    • 感谢您的回复,我已应用更改,现在出现字符串终止符错误。
    • 还需要转义反斜杠。
    【解决方案2】:
    perl -p -i -e 's/\r\n/\n/g' input.txt
    

    您的正则表达式中缺少''。因此错误Substitution pattern not terminated at -e line 1

    【讨论】:

    • 感谢您的回复,当我按照已编辑的问题进行更改时,我收到了另一个警告
    【解决方案3】:

    您是在 Windows 上运行脚本,因此您必须更改单引号和双引号,并定义 -i 标志的扩展名。

    system('perl -i.bak -p -e "s/\r\n/\n/g" words.txt');
    

    【讨论】:

    • 谢谢,警告已消失,但目前 \r\n 字符仍保留在文本文件中。
    猜你喜欢
    • 2014-07-30
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多