7

在我的具体情况下,我需要遍历数百个包含存储 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 找到一个模式,只在找到该模式的行上工作,然后搜索和替换另一个模式用一个新字符串。

在搜索 Google 时,我发现的唯一半相关链接是:如何仅 sed 包含给定字符串的行?. 但它并没有充分回答我的问题。还能够将 sed 通常限制为仅与模式匹配的行将通过一个不错的工具添加到我的 sed 武器库中。

任何导致解决方案的帮助将不胜感激。

这是一个文件的例子

### Example File
#
#
# someurl.com

ENVIRONMENT="someurl.com"

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

4

1 回答 1

10

以下命令行显示了两种可能的解决方案: 您可以使用/regex/. 您可以在替换中使用匹配的文本\0,\1等。

sed -e '/^\(ENVIRONMENT="[^"]*\.com\)"/ s//\1.origin.net"/'
于 2013-04-15T17:40:36.410 回答