[英]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.