如何使用sed替换文本文件中log4j-core开头的文件名
正确的sed替换命令
要实现将dynamicclaspath.cfg中所有log4j-core*格式的文件名替换为log4j-core-2.17.1.jar,可以使用以下命令:
sed -i 's/log4j-core[^/]*\.jar/log4j-core-2.17.1.jar/g' dynamicclaspath.cfg
命令解释:
-i:直接修改原文件(如果是BSD环境下的sed,需写成-i '')s/原模式/替换内容/g:全局替换(g标志确保一行内所有匹配项都被替换)log4j-core[^/]*\.jar:精准匹配目标文件名:log4j-core:锁定目标字符串的开头[^/]*:匹配任意非/的字符,避免跨目录误匹配\.jar:匹配jar文件后缀(.在正则中是特殊字符,需转义)
原命令的问题:
- 行匹配条件
/^log4j-core/错误:你的文件行均以VENDOR_JAR=开头,该条件无法匹配任何行 - 替换正则
[-]*完全不符合需求,没有正确定位要替换的文件名部分 - 缺少全局替换标志
g,且未指定要操作的目标文件名
执行正确命令后,文件内容会变为:
VENDOR_JAR=/clear-as-1-d/apps/sterling/jar/struts/2_5_18/1_0_0/log4j-core-2.17.1.jar VENDOR_JAR=/clear-as-1-d/apps/sterling/jar/log4j/2_17_1/log4j-core-2.17.1.jar
内容的提问来源于stack exchange,提问作者Philip Priest
相关产品推荐
相关产品推荐

