Perl CLI 代码无法附加字符串行

问题描述 投票:0回答:1

我正在尝试使用

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" '
=
=
=
=
=
=
=
=

我该如何解决这个问题?

perl command-line-interface
1个回答
2
投票

chop
返回删除的字符,而不是剩余的字符串。它就地修改变量。所以以下是正确的用法:

perl -npe'chop( $_ ); $_ = "=$_=\n"'

但是我们可以改进这一点。

  • 使用
    chomp
    而不是
    chop
    来删除尾随换行更安全。
  • -n
    -p
    隐含,并且习惯上在使用
    -p
    时将其省略。
  • chomp
    chop
    默认修改
    $_
    ,所以我们不需要显式传递
    $_
perl -pe'chomp; $_ = "=$_=\n"'

最后,我们可以从

-l
中得到完全相同的行为。

perl -ple'$_ = "=$_="'
© www.soinside.com 2019 - 2024. All rights reserved.