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