在我的具體情況中,我需要遍歷數百個包含存儲URL的變量的文件。所有網址都不同,但對於這個例子來說,我們可以假設他們與「COM「」如何使用sed替換僅包含其他模式的文件中的文件中的模式
我需要添加一些文字全部結束立即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查找模式,只在模式找到的行上工作,然後搜索並替換另一個模式用一個新的字符串。
在谷歌搜索,只有半相關的鏈接,我發現這個是:
https://unix.stackexchange.com/questions/37518/how-to-sed-only-that-lines-that-contains-given-string
,但它沒有充分回答我的問題。同樣能夠將sed限制在一般情況下,只需一條匹配模式的線就可以通過一個很好的工具添加到我的sed arsenal中。
任何幫助,這將導致解決方案在這裏將不勝感激。
這裏是
### Example File
#
#
# someurl.com
ENVIRONMENT="someurl.com"
我想要替換「環境=「someurl一個文件的一個例子.COM「」與‘環境=‘someurl.com.orign.net’’
我可能會從插入此信息在一條線殼腳本衍生sed命令如:
`對於f在* .config中;做File2BeEdited = $(cat $ f | grep^PatternToIdentifyLine | grep -v RemoveLinesThatAreAlreadyCorrect); if [「$ File2BeEdited」!=「」];然後RunSedCommand; printf「\ n找到需要編輯的文件。\ N運行的sed在$ F >> log.log「;做
,所以我可以遍歷目錄中的每個配置文件,並選擇性地使這種變化
感謝這正是我想要完成的。尤其是能夠插入匹配的文本。只是爲了澄清我對您提供的答案的匹配文本替換方面的理解;我能用\ 0完成什麼?另外,如果我使用\ 2例如,這個插入是否會說來自正則表達式的第二個匹配文本。例如,如果我正在搜索有2種模式匹配的行。 – Matthew
看看進GNU sed的手冊:在正則表達式反向引用](http://www.gnu.org/software/sed/manual/sed.html#index-Backreferences_002c-in-regular-expressions-103) – nosid
你正在使用什麼'sed'調用地址? – Geremia