[英]SED Escape in bash script
我的tempfile.txt具有以下內容[Typical Cisco Configuration File]
interface GigabitEthernet1/11
no ip address
shutdown
rmon collection stats 6010 owner monitor
!
interface GigabitEthernet1/12
no ip address
shutdown
rmon collection stats 6011 owner monitor
!
interface GigabitEthernet1/13
no ip address
shutdown
rmon collection stats 6012 owner monitor
!
interface GigabitEthernet1/14
no ip address
shutdown
rmon collection stats 6013 owner monitor
!
我試圖遍歷每個塊做一些操作
interface GigabitEthernet1/14 --> start of interface block
no ip address
shutdown
rmon collection stats 6013 owner monitor
! --> end of interface block
我有另一個文件,其下面的數據為intefaces.txt
interface GigabitEthernet1/11
interface GigabitEthernet1/12
interface GigabitEthernet1/13
interface GigabitEthernet1/14
現在要在每個塊中進行一些更改,這就是為什么我嘗試通過以下方式循環訪問塊的原因
while read line
do
sed -n '/$line/,/!/p' tempfile.txt # this should get me block
#code for doing some changes in block
done < interfaces.txt
現在,由於我的$ line將是interfaces.txt的行之一,例如: interface GigabitEthernet1/11
我該如何逃避/
正如我在循環中所做的那樣-我的界面將始終包含/字符
通過在其前面加上反斜杠來告訴sed
在搜索中代替/
的字符:
sed -n "\@${line}@,/!/p" ...
要處理文本塊,請使用gnu awk
(由於RS中有多個字符)
awk -vRS="interface" '/1\/13/ {print RS $0}' file
interface GigabitEthernet1/13
no ip address
shutdown
rmon collection stats 6012 owner monitor
!
在這里您可以獲得接口1/13
所有信息
您可以通過將其作為變量輸入來防止/
的轉義。
awk -vRS="interface" -vtest="1/13" '$0~test {print RS $0}'
interface GigabitEthernet1/13
no ip address
shutdown
rmon collection stats 6012 owner monitor
!
在bash
,可以使用參數全局替換運算符${varname//old/new}
,將斜杠替換為反斜杠,如下所示:
while read line; do
sed -n "/${line//\//\/\/}/",'/!/p' tempfile.txt | # do stuff
done <interfaces.txt
...但是聖潔的牙簽,蝙蝠俠! 我會使用@JonathanLeffler的解決方案來更改sed的搜索分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.