簡體   English   中英

如何使用 sed 僅在包含另一個模式的行中替換文件中的模式

[英]How to use sed to replace a pattern in a file only in lines that contain another pattern

在我的特定情況下,我需要遍歷包含存儲 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 查找模式,僅在找到該模式的行上工作,然后搜索並替換另一個模式用一個新的字符串。

在搜索谷歌時,我找到的唯一半相關鏈接是: 如何只發送包含給定字符串的行? . 但它並沒有充分回答我的問題。 還能夠將 sed 通常限制為僅與模式匹配的行,這將是一個很好的工具,可以添加到我的 sed 武器庫中。

任何導致此處解決方案的幫助將不勝感激。

這是一個文件示例

### Example File
#
#
# someurl.com

ENVIRONMENT="someurl.com"

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

以下命令行顯示了兩種可能的解決方案: 您可以使用/regex/將替換限制為某些行。 您可以使用匹配的文本替換\\0\\1等。

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

你可以用gvim做到這一點..

:克/ ^巴茲/ S /富/酒吧/克

解釋:在以baz開頭的所有行中,用bar替換所有出現的foo。

查看http://vim.wikia.com/wiki/Search_and_replace了解更多詳情..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM