繁体   English   中英

perl -p -i -e用包含符号的文本替换行

[英]perl -p -i -e replace line with text containing symbol

在Linux Vm中,我试图更改50多个文件的第二行。

我已经在下面成功地将此命令用于没有符号的字符串。

perl -p -i -e 's/.*/new_line / if $.==2' .

但是,现在我尝试使用此命令添加新字符串“#$ new_line $”:

perl -p -i -e 's/.*/# $Header$ / if $.==2' .

但是出现以下错误:

Final $ should be \$ or $name at -e line 1, within string
syntax error at -e line 1, near "s/.*/# $Header$ /"
Execution of -e aborted due to compilation errors.

任何帮助表示赞赏。 先感谢您。

该错误消息告诉您确切的问题是:

Final $ should be \$ or $name at -e line 1, within string

您需要转义$ 它看到第二个$作为变量的一部分,但事实并非如此。

您还需要转义第一个$因为Perl将$Header视为变量,并将替换$Header的值而不是实际的字符串$Header 由于$Header没有值,因此您只会得到一个空字符串。

您也不能指定. 作为要操作的文件。 . 是一个目录,Perl会告诉您,如果您尝试将其用作文件:

Can't do inplace edit: . is not a regular file.

您还想使用-l标志来确保Perl正确处理行尾。 当您用新的字符串替换整个字符串时,结尾不包括\\n

所以您想要的是:

perl -l -p -i -e 's/.*/# \$Header\$ / if $.==2' *.html

(用您自己的filespec替换*.html

最后,您也可以将工作变量$_替换为所需的字符串,而不是使用s/// ,如下所示:

perl -l -p -i -e '$_ = q{# $Header$} if $.==2'  *

q{xyz}'xyz'相同,其中不进行内插。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM