我正在尝试使用
perl -npe
单行线用 =
包围每行。
$ for i in {1..4}; { echo $i ;} |perl -npe '...'
=1=
=2=
=3=
=4=
以下是我的第一次尝试。请注意,换行符的位置不正确。
$ for i in {1..4}; { echo $i ;} |perl -npe '$_= "=".$_."=" '
=1
==2
==3
==4
=
我尝试使用
chop
删除它们换行符,然后将它们重新添加到正确的位置,但它不起作用。
$ for i in {1..4} ;{ echo $i ;} |perl -npe '$_= "=".chop($_)."=\n" '
=
=
=
=
=
=
=
=
我该如何解决这个问题?
chop
返回删除的字符,而不是剩余的字符串。它就地修改变量。所以以下是正确的用法:
perl -npe'chop( $_ ); $_ = "=$_=\n"'
但是我们可以改进这一点。
chomp
而不是 chop
来删除尾随换行更安全。-n
由 -p
隐含,并且习惯上在使用 -p
时将其省略。chomp
和chop
默认修改$_
,所以我们不需要显式传递$_
。perl -pe'chomp; $_ = "=$_=\n"'
最后,我们可以从
-l
中得到完全相同的行为。
perl -ple'$_ = "=$_="'