簡體   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