首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换路径的一部分

替换路径的一部分
EN

Stack Overflow用户
提问于 2021-02-26 01:43:14
回答 1查看 45关注 0票数 0

我有一个包含许多子文件夹的文件夹,其中的文件如下所示:version/1.1/...version/1.1.1/...我想要替换1.2版的所有版本号,如下所示:version/1.2/...在替换之前,我想要显示此层次结构中所有文件使用的所有版本号。如何使用grepsed完成此操作

我尝试过的:

代码语言:javascript
复制
grep -Ri "version\/([0-9].[0-9](?:.[0-9])?)\/" .
grep -Ril "version\/([0-9].[0-9](?:.[0-9])?)\/" . | xargs sed sed -i -e 's/(version\/([0-9].[0-9](?:.[0-9])?)\/)/(1.2)/g'
EN

回答 1

Stack Overflow用户

发布于 2021-02-26 03:28:37

POSIX正则表达式不支持非捕获组,并且?不是POSIX BRE中的量词,它只匹配文字?字符。如果您正在使用GNU,您可以转义?以使其成为量词,或者使用-E选项使模式POSIX兼容。

grep "version\/([0-9].[0-9](?:.[0-9])?)\/"模式必须写成"version/[0-9]\.[0-9]\(\.[0-9]\)\{0,1\}/" (同样,它是一个POSIX BRE模式,捕获组是用\(...\)定义的,范围量词是用\{min,max\}指定的)。当文字.字符在括号表达式之外使用时,不要忘记对其进行转义。

删除重复的sed word (您有sed sed)后,您可以使用

代码语言:javascript
复制
sed -i 's/\(version\/\)[0-9.]*/\11.2/g'

它将匹配version/字符串并将其捕获到组1,然后将匹配零个或多个数字或点,并将替换为组1值(\1)和1.2字符串。

完整命令:

代码语言:javascript
复制
grep -Ril "version/[0-9]\.[0-9]\(\.[0-9]\)\{0,1\}/" . | \
 xargs sed -i 's/\(version\/\)[0-9.]*/\11.2/g'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66373746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档