在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.
感谢任何帮助。提前谢谢。
答案 0 :(得分:5)
错误消息告诉您确切的错误:
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
(用您自己的文件规范替换*.html
)
最后,您还可以将工作变量$_
替换为您想要的字符串,而不是使用s///
,如下所示:
perl -l -p -i -e '$_ = q{# $Header$} if $.==2' *
q{xyz}
与'xyz'
相同,不进行插值。