gpt4 book ai didi

regex - 如何使用 sed 仅在包含另一个模式的行中替换文件中的模式

转载 作者:行者123 更新时间:2023-11-29 08:57:26 25 4
gpt4 key购买 nike

在我的特定情况下,我需要遍历数百个包含存储 URL 的变量的文件。所有的 URL 都是不同的,但为了这个例子,我们可以假设它们都以“com”结尾

我需要在 com 之后立即添加一些文本

因为所有的 URL 都有不同的域,所以我不能使用像这样的 sed 命令:

sed -i 's/^ENVIRONMENT="someurl.com"/ENVIRONMENT="someurl.com.origin.net"/g'

因为文件包含其他可能包含 com 的行,所以我不能使用类似的东西:

sed -i 's/com/com.origin.net/g'

我只需要在包含模式的特定行上执行此搜索和替换,例如我在正则表达式中的以下示例:

^ENVIRONMENT.*

如果我可以将 sed 的使用集中在与上述模式匹配的行上,那么我可以使用 sed 的一些改编版,例如 sed -i 's/com/com.origin.net/g'。我当然可以编写一个过于复杂的 bash 脚本来执行此操作,但我知道有一种很好的线性方式告诉 sed 查找模式,仅在找到该模式的行上工作,然后搜索并替换另一个模式用一个新的字符串。

在谷歌搜索中,我发现的唯一半相关链接是:How to sed only that lines that contains given string? .但它并没有充分回答我的问题。还能够将 sed 通常限制为与模式匹配的一行,这将通过一个很好的工具添加到我的 sed 武器库中。

我们将不胜感激任何能在此找到解决方案的帮助。

这是一个文件的例子

### Example File
#
#
# someurl.com

ENVIRONMENT="someurl.com"

我想用 ENVIRONMENT="someurl.com.orign.net" 替换 ENVIRONMENT="someurl.com"

最佳答案

以下命令行显示了两种可能的解决方案:您可以使用 /regex/ 将替换限制为某些行。您可以使用匹配的文本替换 \0\1

sed -e '/^\(ENVIRONMENT="[^"]*\.com\)"/ s//\1.origin.net"/'

关于regex - 如何使用 sed 仅在包含另一个模式的行中替换文件中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16021328/

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