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

发布于 2024-12-03 20:15:49 字数 320 浏览 0 评论 0原文

我有一行文本,如下所示:

/src/my_module_my_branch/my_module 

示例:/src/goodcode_dev/goodcode

我需要将其转换为:

/src/my_branch/my_module 

示例:/src/dev/goodcode

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

I have a line of text which looks like this:

/src/my_module_my_branch/my_module 

Example: /src/goodcode_dev/goodcode

and I need to convert it to:

/src/my_branch/my_module 

Example: /src/dev/goodcode

The problem both module and branch can include underscores.
So I need first to identify the module from the third part and use it to extract out the branch name.
Is there a way using sed to do such conversions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

樱娆 2024-12-10 20:15:49

如果您有 GNU sed,这应该可以工作。它假设一切都以 /src/ 开头。

sed -r 's/^\/src\/([^/]+)_([^/]+)\/\1$/\/src\/\2\/\1/'

英语:

使用扩展正则表达式 (-r) 调用 sed,以便 + 正常工作。匹配行首,/src/,组 1:一个或多个非斜杠,_,组 2:一个或多个非斜杠,/< /code>,组 1,行尾。更改为 /src/,组 2,/,组 1。

If you have GNU sed, this should work. It assumes everything begins with /src/.

sed -r 's/^\/src\/([^/]+)_([^/]+)\/\1$/\/src\/\2\/\1/'

In English:

Invoke sed with extended regex (-r) so that + will work. Match beginning of line, /src/, group 1: one or more non-slashes, _, group 2: one or more non-slashes, /, group 1, end of line. Change to /src/, group 2, /, group 1.

甜是你 2024-12-10 20:15:49

首先找到最后一部分,然后用它来替换

$ echo "/src/my_module_my_branch/my_module" | awk -F"/" '{n=$NF;gsub(n"_","",$3);print}' OFS="/"
/src/my_branch/my_module

First, find the last part, then use it to substitute

$ echo "/src/my_module_my_branch/my_module" | awk -F"/" '{n=$NF;gsub(n"_","",$3);print}' OFS="/"
/src/my_branch/my_module
绻影浮沉 2024-12-10 20:15:49

如果“模块”和“分支”部分之间没有任何区别,那么我会说不。也就是说,如果 my_module_my 可能是模块,并且 branch 是分支,那么 sed 如何知道呢?

If there isn't any difference between the "module" and "branch" parts, then I'd say no. That is, if my_module_my could be the module, and branch the branch, then how would sed know?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文