sed:使用正则表达式的一部分来解析文本

时间:2011-09-07 08:35:36

标签: regex sed

我有一行文字如下:

/src/my_module_my_branch/my_module 

示例:/src/goodcode_dev/goodcode

我需要将其转换为:

/src/my_branch/my_module 

示例:/src/dev/goodcode

模块和分支的问题可以包括下划线。 所以我首先需要从第三部分识别模块并使用它来提取分支名称。 有没有办法使用sed进行此类转换?

3 个答案:

答案 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将如何知道?