【发布时间】:2014-02-01 13:26:21
【问题描述】:
我正在尝试理解 cli 中的 perl one 衬里。
例如,如果我需要在文件中进行替换:
perl -e 's/eat/read/g' file
什么都没有发生。
如果我这样做:
perl -i -e 's/eat/read/g' file
文件也没有任何反应。
只有当我这样做时:
perl -p -i -e 's/eat/read/g' file
文件中的内联替换发生了。
如果我这样做了
perl -n -i -e 's/eat/read/g' file
文件变空!
谁能解释一下不同之处以及每种情况会发生什么?
【问题讨论】:
-
perlrun 会告诉您它们各自的作用。
-
第一个什么都不做,因为没有设置任何标志来调用将文件提供给脚本的行为。第二个出于同样的原因什么也不做。第三种方法有效,因为您告诉 Perl 遍历文件并将输出作为就地编辑发送到文件。 ...并且您告诉 Perl 您总是希望为每一行输出 $_ 。第四个失败,因为尽管您正在遍历文件并进行就地编辑,但您从未向文件发送任何输出,因此它变为空。
标签: regex perl command-line-interface