gpt4 book ai didi

regex - 如何修剪线包括特定字符串与 sed

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:07 25 4
gpt4 key购买 nike

我有单独的文件,每个文件都包含路径字符串;

path = /aaa/bbb/ccc.com/user@ccc.com/dddd/user@yahoo.com/
path = /aaa/bbb/ccc.com/user@ccc.com/dddd/user@hotmail.co.uk/
path = /aaa/bbb/ccc.com/user@ccc.com/dddd/user@abc.xxx.co.uk/
path = /aaa/bbb/ccc.com/user@ccc.com/dddd/user55@ccc.com/

我想要修剪的线条是什么;

path = /aaa/bbb/ccc.com/user/dddd/.user@yahoo/
path = /aaa/bbb/ccc.com/user/dddd/.user@hotmail/
path = /aaa/bbb/ccc.com/user/dddd/.user@abc/
path = /aaa/bbb/ccc.com/user/dddd/.user55@ccc.com/

我几乎可以通过以下实现(所有字符串都在单独的文件中,但在第 15 行)

sed -r '15s!@[^/]+(/[^/]+/[^.@]+@[^.]+).*$!\1/!g' $file

但是,我对将其切割为 ;

的点部分有疑问
path = /aaa/bbb/ccc.com/user/dddd/user55@ccc/

相反,它应该是;

path = /aaa/bbb/ccc.com/user/dddd/.user55@ccc/

提前致谢

最佳答案

使用具有三个捕获组的模式应该可以满足您的需要。第一组将捕获初始 @ 后面的部分(作为我们从替换中省略的组),第二组将包括 /dddd/ 部分,第三组是带有前缀 的完整 user@somewhere

's!(@.+\..+)(/.+/)(.+@.+)!\2.\3!g'

根据你的 bash 版本,你可以像这样使用它:

sed -i.bak -r 's!(@.+\..+)(/.+/)(.+@.+)!\2.\3!g' $file

(GNU bash,版本 4.1.2(1)-release (x86_64-redhat-linux-gnu)

sed -i bak -E 's!(@.+\..+)(/.+/)(.+@.+)!\2.\3!g' $file

GNU bash,版本 3.2.48(1)-release (x86_64-apple-darwin12)

结果:

path = /aaa/bbb/ccc.com/user/dddd/.user@yahoo.com/
path = /aaa/bbb/ccc.com/user/dddd/.user@hotmail.co.uk/
path = /aaa/bbb/ccc.com/user/dddd/.user@abc.xxx.co.uk/
path = /aaa/bbb/ccc.com/user/dddd/.user55@ccc.com/

在最后一场比赛结束时是否要保留完整延期有点不清楚; if not sed 可能不是最佳选择,因为它不能进行前瞻、后视断言,也不能以任何直接的方式切换贪婪。如果这是一个交易破坏者,您可以在许多其他途径之一上使用此模式:

(@.+\..+)(/.+/)(.+@.+?)(\..*/)

结果:

path = /aaa/bbb/ccc.com/user/dddd/.user@yahoo
path = /aaa/bbb/ccc.com/user/dddd/.user@hotmail
path = /aaa/bbb/ccc.com/user/dddd/.user@abc
path = /aaa/bbb/ccc.com/user/dddd/.user55@ccc

关于regex - 如何修剪线包括特定字符串与 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25394847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com