如何使用sed结合正则匹配组替换import语句的路径前缀
sed 批量替换import路径前缀操作方法
你不需要硬套原来写的固定层级正则,用捕获组保留目标文件名的写法更通用,不管import路径是几级目录都能正常替换。
直接可用的命令
- 预览替换效果(不改动原文件):
sed 's|import "[a-zA-Z/]*\([a-zA-Z]\+\.ccc\)"|import "ooooo/\1"|g' 你的目标文件路径
- 确认效果没问题后,直接修改原文件:
sed -i 's|import "[a-zA-Z/]*\([a-zA-Z]\+\.ccc\)"|import "ooooo/\1"|g' 你的目标文件路径
逻辑说明
- 这里选用
|作为sed替换的分隔符,不用对路径里的/做额外转义,写法更简洁不容易出错 - 正则里的
[a-zA-Z/]*会匹配引号内、文件名之前的所有多级路径前缀,不管是1级、2级还是更多级目录都能覆盖,比你原来写的固定匹配1/2级目录的正则兼容性更好 - 括号包裹的
\([a-zA-Z]\+\.ccc\)是捕获组,会自动抓取末尾的.ccc格式文件名,替换时用\1引用捕获到的文件名,拼到ooooo/前缀后即可 - 所有非import语句的行(比如示例里的
BLBLBL这类普通内容)不会被正则匹配,会原样保留
替换效果
对你提供的示例文件执行命令后,输出结果完全符合要求:
import "ooooo/bbbb.ccc"; import "ooooo/eeee.ccc"; import "ooooo/hhhh.ccc"; BLBLBL BL2BL2BL
内容的提问来源于stack exchange,提问作者Alak
相关产品推荐
相关产品推荐

