![](/img/trans.png)
[英]How can I replace a pattern only on lines that do or do not contain another pattern?
[英]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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.