为什么"print/regex /?print a:print b"在每一行之前加上"1"?

Jas*_*nes 3 perl

当我运行下面的Perl单行程序时,它会打印1在每一行的前面,我不想这样做.它应该做的只是匹配的注释行root.

$ cat /etc/passwd | perl -ne 'print /root/ ? print "\#$_" : print $_'
1daemon:x:1:1::/:
1bin:x:2:2::/usr/bin:
#root:x:0:0:Super-User:/root:/usr/bin/bash
1sys:x:3:3::/:
Run Code Online (Sandbox Code Playgroud)

Tom*_*ech 10

您正在打印返回值print,该值已成功,因此评估为1.

我建议将代码更改为:

perl -pe '$_ = "#$_" if /root/' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

我在这里使用-p开关,因此$_始终打印.#/root/匹配时在行开始之前添加A.

如果要print明确地执行此操作,请使用以下命令:

perl -ne 'print /root/ ? "#$_" : $_' /etc/passwd
Run Code Online (Sandbox Code Playgroud)


Cha*_*ffy 8

你只需要一个print; 不要在三元内放两个!

perl -ne 'print /root/ ? "\#$_" : $_' </etc/passwd
Run Code Online (Sandbox Code Playgroud)

实际上,您无条件地打印print三元运算符执行的返回值- 因此,1.