当我运行下面的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)
你只需要一个print; 不要在三元内放两个!
perl -ne 'print /root/ ? "\#$_" : $_' </etc/passwd
Run Code Online (Sandbox Code Playgroud)
实际上,您无条件地打印print三元运算符执行的返回值- 因此,1.