【问题标题】:perl command line substitute of stringsperl 命令行替换字符串
【发布时间】:2017-11-17 18:52:25
【问题描述】:

perl 有方便的命令行语法来替换文件

perl -pe 's/key/replace/g' file

我想知道字符串替换的单行语法是什么?

perl -pe 's/key/replace/g' string

不起作用。它会抱怨

无法打开 ppp:没有这样的文件或目录。

【问题讨论】:

    标签: perl


    【解决方案1】:

    您可以使用echo(或您的操作系统的等效项)将您的字符串发送到您的命令行 Perl 程序中。

    $ echo hello | perl -pe 's/hello/goodbye/'
    goodbye
    

    【讨论】:

    • 非常感谢。这既简单又有效。
    • 但也使用这里的字符串:perl -pe 's/key/replace/g' <<< 'string'
    【解决方案2】:

    您可能想要删除 -p 选项,因为它会将您的代码包装在 while(<>) 循环中。对于 perl <> 意味着读取命令行或 STDIN 指定的文件(如果没有的话)。所以你的“字符串”(当你尝试它时我猜是“ppp”)被视为文件名。

    如果你想传入非文件名,你可能想要这样的东西:

    perl -e 'print join(" ",map{ s/key/replace/g; $_ } @ARGV),"\n"' string
    

    【讨论】:

    • 但是保留-p 并稍微滥用while 循环会使代码变得简单得多:-)
    • @DaveCross 是的,但我认为解释一下-p 的作用以及为什么 OP 代码永远不会按原样工作会很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 2017-12-27
    • 2012-03-29
    • 2013-01-28
    相关资源
    最近更新 更多