微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl -p -i -e用包含符号的文本replace行

在Linux Vm中,我试图改变50+文件的第二行。

我已经成功地将下面的命令用于没有符号的string。

perl -p -i -e 's/.*/new_line / if $.==2' .

但是现在我试图使用这个命令添加新的string“#$ new_line $”:

perl -p -i -e 's/.*/# $Header$ / if $.==2' .

但是得到以下错误

用户模式下阅读kallsyms

CV符号是什么意思?

windbg内核debugging时无法获得完整的用户模式堆栈跟踪

SymGetModuleInfo64返回空的GUID

连接共享库g ++时出现奇怪的符号

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.

任何帮助表示赞赏。 先谢谢你。

linux命令“符号

batch file是不必要的加倍字符字符

符号如何在x86debugging中用FPO来解决堆栈问题?

Linuxfunctionredirect

C ++未定义的符号与静态库中的std :: string相关

错误消息告诉你到底什么是错的:

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' ,没有内插。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐