我有以下VPN隧道状态输出:
[root@localhost:~]# setkey -D
82.113.11.226 10.18.1.201
esp mode=tunnel spi=143937423(0x08944f8f) reqid=0(0x00000000)
E: 3des-cbc c114543c 3049e8b8 c033e4ea 07e0054e 3e8ac254 f0dbb7f5
A: hmac-md5 8461e21b 2318bb9c 352bee1d e24a0a53
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Jan 28 09:52:41 2013 current: Jan 28 09:56:58 2013
diff: 257(s) hard: 3600(s) soft: 2880(s)
last: Jan 28 09:52:49 2013 hard: 0(s) soft: 0(s)
current: 852(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 11 hard: 0 soft: 0
sadb_seq=1 pid=12264 refcnt=0
10.18.1.201 82.113.11.226
esp mode=tunnel spi=3053715472(0xb6040010) reqid=0(0x00000000)
E: 3des-cbc 28c87550 a6c9a17b 37ad0b02 03567617 79647aeb 644563d8
A: hmac-md5 0ef83de9 1b279a16 658eb176 dad37d50
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Jan 28 09:52:41 2013 current: Jan 28 09:56:58 2013
diff: 257(s) hard: 3600(s) soft: 2880(s)
last: Jan 28 09:52:41 2013 hard: 0(s) soft: 0(s)
current: 1524(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 19 hard: 0 soft: 0
sadb_seq=0 pid=12264 ref
我想获取仅包含ip地址的行,并比较第一行的左边部分是否与第二行的右边部分相等,这是空格的分隔和vise - 反之亦然。在第一步,我做了以下命令:
[root@localhost:~]# setkey -D | sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p'
82.113.11.226 10.18.1.201
10.18.1.201 82.113.11.226
线条对空间感兴趣。任何人都可以建议任何awk或sed表达式吗?
答案 0 :(得分:3)
使用awk
比较字符串更容易。试试这个:
setkey -D | awk 'NR==1 { a=$1; b=$2; next } !/^ / { print ($1==b && $2==a ? "match" : "none") }'
在您的输入中,我的结果是:
match
答案 1 :(得分:1)
首先使用tr
将IP地址置于同一行,然后使用带有反向引用的egrep
检查它们是否相同:
$ cat file
10.18.1.201 82.113.11.226
82.113.11.226 10.18.1.201
$ tr '\n' ' ' < file | egrep "^(.*) (.*) \2 \1"
82.113.11.226 10.18.1.201 10.18.1.201 82.113.11.226
答案 2 :(得分:0)
我认为最好的方法是简单地使用read
并将数据读取到这样的单独变量中:
read -r trash right
read -r left trash
# compare left and right