gpt4 book ai didi

regex - Bash Regex 用相对路径替换绝对路径

转载 作者:行者123 更新时间:2023-11-29 09:30:15 26 4
gpt4 key购买 nike

我使用以下代码遍历一些 xml 文件。

for i in ./*.xml; do
some line replacing content in the file $i
done

在每个文件中,我想用从某个目录开始的相对路径替换所有描述绝对路径的字符串。


在其中一个 xml 文件中:

之前:/home/user/workspace/proj/bin

之后:./proj/bin

如何在我的 for 循环中用一行(正则表达式)bash 来做到这一点?如果您能描述正则表达式,那就太好了。


我可以做这样的事情吗?:sed -i 's/.*(/proj)/.$1/g' $i

  1. 全局逐行替换。
  2. 尝试匹配路径的开头。
  3. 保存我想保留的部分并预先附加一个.

这行不通,但这是一个想法

最佳答案

Can I do something like this:

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* 的原因:假设你有一些像这样的字符串:

I will go to /home/user/workspace/proj/bin and delete stuff now.

如果不使用 \S*,您将得到:

./proj/bin and delete stuff now.

代替:

I will go to ./proj/bin and delete stuff now.

关于regex - Bash Regex 用相对路径替换绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com