我使用以下代码来迭代一些xml文件。
for i in ./*.xml; do
some line replacing content in the file $i
done
在每个文件中,我想要替换描述绝对路径的所有字符串及其相对路径从某个目录开始。
其中一个xml文件:
之前:/home/user/workspace/proj/bin
之后:./proj/bin
我可以这样做吗?:sed -i's /.*(/ proj)/. $ 1 / g'$ i
这不起作用,但这是一个想法
答案 0 :(得分:2)
我可以这样做:
sed -i 's/.*(/proj)/.$1/g' $i
是的,你可以。你只需要
/
,要么我更喜欢后一种方法:
for i in ./*.xml; do
sed -i 's:\S*\(/proj\):.$1:g' "$i"
done
解释了"$i"
的原因in comments。
在模式中使用\S*
的原因:假设您有一些字符串:
我将转到
/home/user/workspace/proj/bin
并立即删除内容。
不使用\S*
,您最终会得到:
./proj/bin
并立即删除内容。
而不是:
我将转到
./proj/bin
并立即删除内容。
答案 1 :(得分:0)
是否有必要使用正则表达式?为什么不简单:
find . -type f -name "*.xml"
通过这种方式,您将直接获得相对路径(当然,根据您的CWD)。