我有以下输出:
[root@localhost:~]# setkey -DP
(per-socket policy)
Policy:[Invalid direciton]
created: Feb 5 09:25:06 2013 lastused: Feb 5 10:25:10 2013
lifetime: 0(s) validtime: 0(s)
spid=411 seq=1 pid=4415
refcnt=1
(per-socket policy)
Policy:[Invalid direciton]
created: Feb 5 09:25:06 2013 lastused: Feb 5 10:13:21 2013
lifetime: 0(s) validtime: 0(s)
spid=420 seq=2 pid=4415
refcnt=1
192.168.111.0/24[any] 192.168.0.0/24[any] any
out prio def ipsec
esp/tunnel/94.243.123.241-89.28.12.86/require
created: Feb 5 09:25:13 2013 lastused: Feb 5 09:25:44 2013
lifetime: 0(s) validtime: 0(s)
spid=441 seq=3 pid=4415
refcnt=1
192.168.0.0/24[any] 192.168.111.0/24[any] any
in prio def ipsec
esp/tunnel/89.28.12.86-94.243.123.241/require
created: Feb 5 09:25:13 2013 lastused:
lifetime: 0(s) validtime: 0(s)
spid=448 seq=4 pid=4415
refcnt=1
192.168.0.0/24[any] 192.168.111.0/24[any] any
fwd prio def ipsec
esp/tunnel/89.28.12.86-94.243.123.241/require
created: Feb 5 09:25:13 2013 lastused:
lifetime: 0(s) validtime: 0(s)
spid=458 seq=0 pid=4415
refcnt=1
我只想从中得到这一行:
192.168.111.0/24 192.168.0.0/24
不了解行的位置
我已经进行了以下正则表达式构造,但它们不起作用:
[root@localhost:~]# setkey -DP | sed -rne 's/^(([0-9]{1,3}\.){3}[0-9]{1,3})(\/[0-9]{1,2}).*(([0-9]{1,3}\.){3}[0-9]{1,3})(\/[0-9]{1,2})/\1\2\3\4/p'
192.168.111.0111./242.168.0.0[any] any
192.168.0.00./242.168.111.0[any] any
192.168.0.00./242.168.111.0[any] any
[root@localhost:~]# setkey -DP | sed -rne 's/^(([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}).*(([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2})/\1\2/p'
192.168.111.0/24111.[any] any
192.168.0.0/240.[any] any
192.168.0.0/240.[any] any
错误在哪里?
预先感谢您,叶夫根尼
最佳答案
我宁愿分别找到每组数字,可能是这样的:
sed -rn 's|[^0-9]*(([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2})|\1\n|g; s/\n[^\n]*$//; s/\n/ /gp'
输出:
192.168.111.0/24 192.168.0.0/24
192.168.0.0/24 192.168.111.0/24
192.168.0.0/24 192.168.111.0/24
但是,如果您想匹配这对组,您可以将第二个正则表达式更改为:
sed -rne 's/^(([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2})[^0-9]*(([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}).*/\1 \3/p'
- 使用否定组
[^0-9]*
在数字组之间进行非贪婪匹配。 - 在末尾添加
.*
以匹配数字组后面的所有内容。 - 您想要用第一个和第三个反向引用(
\1
和\3
)替换所有内容。反向引用根据其起始括号的位置进行编号。
关于bash - sed 处理烦人的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703130/