[英]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.