更新#2:我对这个选项有很大的误解-p
,现在我很清楚它用于处理作为参数提供的所有文件,但我仍然不太明白为什么在从stdin
.
更新#1:我注意到-p
总是需要该选项(至少在执行替换时),即使使用默认分隔符(换行符)并且输入文件是单行时也是如此,我不太明白为什么放弃-p
处理单行的选项(这似乎是合适的)会破坏一切(即没有输出)。
例如,按预期运行echo -n 'test' | perl -pe 's/test/newstring/'
输出,但不输出任何内容。newstring
echo -n 'test' | perl -e 's/test/newstring/'
原始问题:
为什么stdin
在 Perl 命令中读取整个文件(例如perl -0777 -e [...]
)仍然需要-p
给出选项才能实际处理文件(例如perl -0777 -pe [...]
)?
我知道该-p
选项在命令的每一行周围放置了一个循环,但是为什么不更改(在本例中是删除)足以让 Perl 处理文件的分隔符?或者,尽管文件只会被处理一次,但为什么有必要告诉 Perl 在命令的每一行周围放置一个循环?
该
perl --help
命令指出-p assumes a loop like -n but prints line also, like sed
.sed
是一个流编辑器,用于操作文本,就像-p
选项与perl
.-p
是perl
打印处理后输出的唯一选项。如果没有该-p
选项,则无法打印处理后的输出。因此,正如我在下面的示例中所示,如果没有打印,则不会替换字符串。警告:不要替换 With ,
-p
因为-n
它会清空您的文件!