繁体   English   中英

Perl一线式操作include目录

[英]Perl one-liner to manipulate include directory

我有数百个文件,其中包含指令需要更改。

原型是#include "MyFile.hpp" ,但是我需要在每个包含文件的前面附加一个目录,如下所示: #include "project-head/MyFile.hpp"

我编写了一个单行的perl脚本,如下所示:

perl -p -i -e 's|/(#include /")/(.*/.hpp)|/1project-head/2|g' test_file.hpp

但是测试文件似乎没有改变。 我的perl表达式有什么问题?

您的Perl脚本中有多个奇斜杠。 后向引用应为\\1\\2等,其余的应完全删除。

perl -p -i -e 's|(#include ")(.*\.hpp)|\1project-head/\2|g' test_file.hpp

如果不是很明显, /\\是两个具有完全不同语义的不同字符。

替换命令的原型为s/from/to/但是您可以使用并且在您的代码中使用不同的定界符,因此它是s|from|to| 根本没有斜杠(唯一剩余的正斜杠是project-head和原始文件名之间的目录分隔符)。

反斜杠通常用作转义符。 例如\\. 匹配文字周期(而未转义的.是匹配除换行符以外的任何字符的正则表达式元字符)。 它在\\1也具有特殊含义,以引用由第一个括号括起来的子表达式匹配的文本(尽管在替换部分$1是首选)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM