指定要处理的文件到 Perl 单行

Posted

技术标签:

【中文标题】指定要处理的文件到 Perl 单行【英文标题】:Specifying file to process to Perl one-liner 【发布时间】:2017-06-04 05:12:27 【问题描述】:

给了我一个 Perl 单行代码。它具有以下形式:

perl -pe'...'

如何指定要处理的文件给程序?

【问题讨论】:

我厌倦了将答案粘贴到使用 Perl 单行解决方案回答的每个问题中。 【参考方案1】:

有关如何启动 perl 的文档可在 perlrun 手册页中找到。

perl -pe'...' -i~ file [file [...]]   # Modifies named file(s) in place with backup.
perl -pe'...' -i file [file [...]]    # Modifies named file(s) in place without backup.
perl -pe'...' file.in >file.out       # Reads from named file(s), outputs to STDOUT.
perl -pe'...' <file.in >file.out      # Reads from STDIN, outputs to STDOUT.

如果文件名可以以- 开头,您可以使用--

perl -pe'...' [-i[~]] -- "$file" [...]

如果您想修改多个文件,您可以使用以下任何一种:

find ... -exec               perl -pe'...' -i~  +   # GNU find required
find ...         | xargs -r  perl -pe'...' -i~        # Doesn't support newlines in names
find ... -print0 | xargs -r0 perl -pe'...' -i~

在上述所有内容中,方括号 ([]) 表示可选内容。它们不应出现在实际命令中。另一方面,-exec 子句中的 应该按原样显示。


注意:一些单行代码使用-n 和显式打印而不是-p。以上所有内容也适用于这些。

【讨论】:

这非常有用。能否在 find 命令的 -exec 选项中添加 perl 的使用方法。 @stack0114106,它已经在那里了。这是第一个。 谢谢.. 我认为这需要一个 for 循环。 @stack0114106,Perl 的-n/-p 将愉快地依次读取命令行提供的每个文件。所有三个版本都可以将多个文件传递给perl 的单个调用。使用-exec perl ... \;(GNU find 或其他)每次调用perl 只获取一个文件(例如,如果您想在END 中对每个文件执行某些操作。)

以上是关于指定要处理的文件到 Perl 单行的主要内容,如果未能解决你的问题,请参考以下文章

Perl单行(Perl One-Liners)命令

Perl单行命令介绍

在 vim 编辑中使用 perl 单行命令

perl批量处理文件

操作指定文件格式的10个Perl CPAN模块

shell 读取文件指定单行 多行 连续行 倒数几行