我有一行文字如下:
/src/my_module_my_branch/my_module
示例:/src/goodcode_dev/goodcode
我需要将其转换为:
/src/my_branch/my_module
示例:/src/dev/goodcode
模块和分支的问题可以包括下划线。 所以我首先需要从第三部分识别模块并使用它来提取分支名称。 有没有办法使用sed进行此类转换?
答案 0 :(得分:1)
如果你有GNU sed,这应该有效。它假定所有内容都以/src/
开头。
sed -r 's/^\/src\/([^/]+)_([^/]+)\/\1$/\/src\/\2\/\1/'
英文:
使用扩展的正则表达式sed
调用-r
,以便+
可以正常工作。匹配行首,/src/
,第1组:一个或多个非斜杠,_
,第2组:一个或多个非斜杠,/
,第1组,行尾。更改为/src/
,第2组,/
,第1组。
答案 1 :(得分:1)
首先,找到最后一部分,然后用它来代替
$ echo "/src/my_module_my_branch/my_module" | awk -F"/" '{n=$NF;gsub(n"_","",$3);print}' OFS="/"
/src/my_branch/my_module
答案 2 :(得分:0)
如果“模块”和“分支”部分之间没有任何区别,那么我会说不。也就是说,如果my_module_my
可以是模块,而branch
是分支,那么sed
将如何知道?