![]() |
1
7
第一个生成文件列表并将其“管道”到Perl。然后,Perl通过从标准输入读取列表:
在Unix shell中,这是一个常见的操作,因此您根本不必使用Perl:
第二个生成文件名列表,并将其转换为命令行参数,然后在中的程序中显示
这也是Perl的一个特性。shell以程序可以访问的某种数据结构提供命令后的位。其他语言有相似的结构,即使它们看起来不一样。
然而,钻石运营商,
第二种方法的问题往往会在您有一长串参数时出现。有些shell限制了可以在命令行上显示的内容的数量。我不太喜欢第二个版本,只是因为这个原因。 但是,您不必使用find(1)(shell版本),而是可以将其转换为一个自包含的Perl程序:
输出是一个Perl程序,不需要依赖任何外部命令。 |
![]() |
2
3
第一个将文件名(每行一个)发送到程序的
第二个电话
因此,第一个操作文件的名称,第二个操作文件的内容。
你可以看到代码
生产
这个
这两种形式绝对不能互换。一影响
许多Unix程序充当过滤器。过滤器的规则是从
这个命令实际运行
|
![]() |
3
0
您会问“第一个将文件名传递给Perl,第二个传递看起来像是的文件内容。在Unix或Perl的特殊属性下,这总是正确的吗?此行为不特定于Perl。其中一部分是由Unix完成的。这是一个被广泛遵守的惯例。管道行为(命令后接
例子。请在bash中继续使用您的计算机。
这将创建一个空目录,将CD放入其中,并在空目录中创建26个文件,每个文件包含1000行。
使用Ubuntu/Linux实用程序
有了PerlOne语句,您可以轻松地搜索这些文件。例子:
你可以使用
如果将该表单转换为管道,则在Perl(或awk或egup)左侧的上一个命令的输出上进行操作。前一部分stdout的输出正被馈送到Perl的stdin。如果该命令生成文件名,则您将对文件名进行操作:
除非你先用
与此类似的输出:
也许这就是你对表格可互换性感到困惑的地方?他们不是!两件截然不同的事情正在发生。如果你使用
以另一种形式,
但是,要避免
你特别询问了表格:
作为brian d foy
pointed out
,命令行长度有限制,您应该注意此表单。您还可以使用反勾号以意外方式中断文件名。而不是反勾号表,使用
要查看中断文件名的问题,请键入以下命令:
|
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
BioRod · 我不能用Perl打印键和值 2 年前 |
![]() |
user17227456 · Perl CLI代码无法追加字符串行 2 年前 |
![]() |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 2 年前 |
![]() |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 2 年前 |
![]() |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 2 年前 |
![]() |
Pranay Nanda · 使用regex解析许可证文件 6 年前 |