我有一个包含许多子文件夹的文件夹,其中的文件如下所示:version/1.1/...或version/1.1.1/...我想要替换1.2版的所有版本号,如下所示:version/1.2/...在替换之前,我想要显示此层次结构中所有文件使用的所有版本号。如何使用grep和sed完成此操作
我尝试过的:
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'发布于 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)后,您可以使用
sed -i 's/\(version\/\)[0-9.]*/\11.2/g'它将匹配version/字符串并将其捕获到组1,然后将匹配零个或多个数字或点,并将替换为组1值(\1)和1.2字符串。
完整命令:
grep -Ril "version/[0-9]\.[0-9]\(\.[0-9]\)\{0,1\}/" . | \
xargs sed -i 's/\(version\/\)[0-9.]*/\11.2/g'https://stackoverflow.com/questions/66373746
复制相似问题