簡體   English   中英

用sed替換整個短語

[英]Using sed to replace entire phrase

在添加和刪除區域引用時,我正在使用ShellScript編輯我的bind dns配置文件。 然后在“master.conf”文件中我們有這樣的內容:

...
...
zone "mydomain.com" {
   type master; 
   file "/var/zones/m/mydomain.com"
};
...
...

我希望使用“sed”將此條目“刪除”到“mydomain.com”,但我無法為此編寫正確的正則表達式。 表達式必須使用變量域名並搜索直到下一個括號和分號,如下所示:

DOMAIN_NAME="mydomain.com"
sed -i.bak -r 's/^zone "'$DOMAIN_NAME'" \{(.*)\};$//g' /var/zones/master.conf

看到我們應該忽略括號之間的內容,並且這個塊必須替換為“nothing”。 我嘗試了這個表達式的一些變體,但沒有成功。

也許你可以使用awk?

awk -v dom="mydomain.com" '$2 ~ dom, /^};$/ {next}1' file

,是范圍運營商。 第二個字段中帶有dom的行與僅包含“};”的行之間的范圍為true。 next跳過那些線。 其余的都打印出來了。

使用awk '...' file > tmp && mv tmp file覆蓋原始文件。

嘗試下面應該使用的sed腳本

碼:

sed -i '/"mydomain.com" [{]/{
:loop
N
s/[}][;]/&/
t end
b loop
:end
d
}' master.conf

輸入:

zone "myd.com" {
   type master;
   file "/var/zones/m/mydomain.com"

};
zone "mydomain.com" {
   type master;
   file "/var/zones/m/mydomain.com"
};

輸出:

zone "myd.com" {
       type master;
       file "/var/zones/m/mydomain.com"

    };

如果它不必是單行,您可以使用'grep'來獲取行號,然后使用'sed'從行號中刪除整個節。

請參閱使用sed從文本文件中刪除特定行號?

暫無
暫無

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

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