【发布时间】:2014-02-02 10:03:03
【问题描述】:
我已经搜索过这个,但我没有找到我正在寻找的确切内容。
我想要做的是在同一个文件中替换包含名称中带有“PATTERN”文本的 jar 文件的所有行,以便我可以在这些行中添加一个带有这些 jar 文件源代码的新属性。这些 jar 的源代码将始终位于相同的相对文件夹中(即 path1/lib/a.jar -> path1/src/java)
这方面的一个例子。这是我的原始文件:
<classpathentry path="/sde/ATG/ATG10.1.2/Momentum/Search/I18N/lib/MOM-Search-I18N-0.23-ECI.jar" />
<classpathentry path="/sde/ATG/ATG10.1.2/DAS/lib/axis-1.4.jar" />
<classpathentry path="/sde/ATG/ATG10.1.2/REST/lib/org.json.jar" />
<classpathentry path="/sde/ATG/ATG10.1.2/Momentum/StoreFront/lib/MOM-Search-I18N-Index-0.23-ECI.jar" />
我想得到这个:
<classpathentry path="/sde/ATG/ATG10.1.2/Momentum/Search/I18N/lib/MOM-Search-I18N-0.23-ECI.jar" sourcepath="/sde/ATG/ATG10.1.2/Momentum/Search/I18N/src/main/java" />
<classpathentry path="/sde/ATG/ATG10.1.2/DAS/lib/axis-1.4.jar" />
<classpathentry path="/sde/ATG/ATG10.1.2/REST/lib/org.json.jar" />
<classpathentry path="/sde/ATG/ATG10.1.2/Momentum/StoreFront/lib/MOM-Search-I18N-Index-0.23-ECI.jar" sourcepath="/sde/ATG/ATG10.1.2/Momentum/StoreFront/src/main/java"/>
我需要在带有我的模式的行中添加一个 sourcepath 属性,并且该 sourcepath 值应该取路径值的根。
作为
grep -o 'path="[/-.0-9A-Za-z]*/lib/MOM[-.0-9A-Za-z]*.jar"' test.txt
给我包含我正在寻找的罐子的行的行,我认为这会解决我的问题:
cat test.txt | sed -r 's|path="[/-.0-9A-Za-z]*/lib/MOM[-.0-9A-Za-z]*.jar"|\1 sourcepath="\2/main/src/main/java"/>|'
但是给了我这个错误:sed: -e expression #1, char 91: invalid reference \2 on `s' command's RHS
有什么想法吗?
谢谢大家!
【问题讨论】:
标签: string shell replace sed grep