[英]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'從行號中刪除整個節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.