perl -p -i -e 用包含符号的文本替换行
perl -p -i -e replace line with text containing symbol
在 linux 虚拟机中,我正在尝试更改 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
(将 *.html
替换为您自己的文件规范)
最后,你也可以只用你想要的字符串替换工作变量 $_
,而不是使用 s///
,像这样:
perl -l -p -i -e '$_ = q{# $Header$} if $.==2' *
q{xyz}
与 'xyz'
相同,其中没有进行插值。
在 linux 虚拟机中,我正在尝试更改 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
(将 *.html
替换为您自己的文件规范)
最后,你也可以只用你想要的字符串替换工作变量 $_
,而不是使用 s///
,像这样:
perl -l -p -i -e '$_ = q{# $Header$} if $.==2' *
q{xyz}
与 'xyz'
相同,其中没有进行插值。