【问题标题】:Perl regex to act on a file from the command linePerl 正则表达式从命令行作用于文件
【发布时间】:2010-12-06 09:23:33
【问题描述】:

在一个文件中,比如说 xyz.txt,我想替换任何数字的模式,后跟一个点示例:1.,2.,10.,11。等..带有空格。 如何在命令行上编写一个perl命令作用于文件进行上述操作,应该使用什么正则表达式?

请帮忙 谢谢。

【问题讨论】:

    标签: perl unix


    【解决方案1】:

    这必须是 Perl oneliner?

    perl -i -pe  's/\d+\./ /g' <fileName>
    

    Perl 命令行选项:-i 用于指定输入文件会发生什么。如果你不给它一个文件扩展名,原始文件就会丢失,并被 Perl munged 输出替换。例如,如果我有这个:

    perl -i.bak -pe  's/\d+\./ /g' <fileName>
    

    原始文件将以.bak 后缀存储, 本身将包含您的输出。

    -p 表示将您的 Perl 程序包含在一个看起来 SOMEWHAT 如下所示的打印循环中:

    while ($_ = <>) {
        <Your Perl one liner>
        print "$_";
    }
    

    这是一个稍微简化的解释是怎么回事。您可以通过从命令行执行 perldoc perlrun 来查看实际的 perl 循环。主要思想是它允许您像sedawk 一样对文件的每一行进行操作。

    -e 只包含您的 Perl 命令。

    你也可以做文件重定向:

    perl -pe  's/\d+\./ /g' < xyz.txt > xyz.txt.out
    

    【讨论】:

    • +1 用于指出 -i 的非常有用的用法,用于解释 -p 背后的机制,并用于显示重定向替代方案,以及正确回答问题。
    • 如果您在 windows CMD 中使用 Active Perl,请使用双引号 "" 将正则表达式字符串括起来,否则它将不起作用。刚刚在我的 Windows 10 命令行中进行了测试。
    • 我再也不会使用sed了。 perl -pe
    【解决方案2】:

    答案(未测试):

    perl -ipe "s/\d+\./ /g" xyz.txt
    

    【讨论】:

    • 我个人喜欢输入perl -pie,因为这样会拼出一个单词,但没关系。
    • i 之后的任何内容(除了空格)都不是 perl 选项,而是用什么作为备份文件名的后缀(一个空格可以让 perl 不创建备份文件 - 这可能是您想要的如果您在 git 存储库中)。所以 -pie 正在寻找以下第一个参数作为您要执行的 perl 命令的文件。
    【解决方案3】:

    两者

    perl -ipe "s/\d+\./ /g" xyz.txt
    

    perl -pie
    

    无法在我的系统上执行。

    我使用以下顺序:

    perl -i -pe
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多