在Linux Vm中,我试图改变50+文件的第二行。
我已经成功地将下面的命令用于没有符号的string。
perl -p -i -e 's/.*/new_line / if $.==2' .
但是现在我试图使用这个命令添加新的string“#$ 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
你需要逃避$
s。 它看到第二个$
作为变量的一部分,但事实并非如此。
您还需要转义第一个$
因为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'
是一样'xyz'
,没有内插。