我对perl不熟悉。我正在阅读安装指南atm,并且出现了以下Linux命令:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
现在,我正在试图理解这一点。到目前为止,这是我的理解:
-e仅允许执行以下操作
-p使我跟随-e的命令循环。现在这对我来说很奇怪,因为对我来说,该命令似乎试图说:在/ etc / selinux / config中写入“ s / enforcing / disabled /”。再说一遍,“写”命令在哪里? -i(内联)有什么用?
答案 0 :(得分:4)
-p
更改
s/enforcing/disabled/
等同于
while (<>) {
s/enforcing/disabled/;
print;
}
简写
while (defined( $_ = <ARGV> )) {
$_ =~ s/enforcing/disabled/;
print($_);
}
这是什么:
ARGV
到$_
读一行。 ARGV
是一个特殊的文件句柄,它从指定为参数的每个文件中读取(如果没有提供文件,则从STDIN中读取)。enforcing
的第一个匹配项替换为disabled
。-i
,这是一个新文件的句柄,该文件的名称与程序当前正在读取的文件的名称相同。* 例如,
$ cat a
foo
bar enforcing the law
baz
enforcing enforcing
$ perl -pe's/enforcing/disabled/' -i a
$ cat a
foo
bar disabled the law
baz
disabled enforcing
* —在旧版本的Perl中,旧文件此时已被删除,但是只要有打开的文件句柄,它仍然可以访问。在非常新的Perl版本中,这会写入临时文件,该文件随后将覆盖程序正在读取的文件。
答案 1 :(得分:1)
要准确了解 Perl的功能,可以使用the O
module
perl -MO=Deparse -p -i -e "s/enforcing/disabled/" file
输出
BEGIN { $^I = ""; }
LINE: while (defined($_ = readline ARGV)) {
s/enforcing/disabled/;
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK