当位于第 3 级且分隔符为 /
时,想要从字符串重命名(未知)文件路径中的(已知)第 3 个文件夹
sed
明确需要一行。因为我稍后想将它用于 tar --transform=EXPRESSION
string="/db/foo/db/bar/db/folder"
echo "$string" | sed 's,db,databases,'
sed 仅在第 3 级替换“db”
预期结果
/db/foo/databases/bar/db/folder
最佳答案
您可以使用捕获组来捕获/db/foo/
,然后匹配db
。然后使用 \1
在替换中使用第一个 caputring 组:
string="/db/foo/db/bar/db/folder"
echo -e "$string" | sed 's,^\(/[^/]*/[^/]*/\)db,\1databases,'
关于模式
^
字符串开始\(
开始捕获组/[^/]*/[^/]*/
使用否定字符类匹配前两部分
\)
关闭捕获组db
字面匹配
那会给你
/db/foo/databases/bar/db/folder
关于sed 替换未知字符串的位置匹配除以用户定义的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55343129/