我正在编写一个ansible-deployment项目的脚本,它几乎完成了,只是修复了bug。 此脚本的一个选项是对先前指定的程序进行版本检查(例如fontconfig)Ansible提供以下输出:
PLAY [all]
********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.40.132]
ok: [192.168.40.133]
ok: [192.168.40.134]
ok: [192.168.40.135]
TASK: [Find affected package] *************************************************
changed: [192.168.40.135]
changed: [192.168.40.132]
changed: [192.168.40.133]
changed: [192.168.40.134]
TASK: [debug var=dpkg.stdout_lines] *******************************************
ok: [192.168.40.132] => {
"dpkg.stdout_lines": [
"ii fontconfig 2.11.0-6.3+deb8u1 i386 generic font configuration library - support binaries",
"ii fontconfig-config 2.11.0-6.3+deb8u1 all generic font configuration library - configuration",
"ii libfontconfig1:i386 2.11.0-6.3+deb8u1 i386 generic font configuration library - runtime"
]
}
ok: [192.168.40.133] => {
"dpkg.stdout_lines": [
"ii fontconfig 2.11.0-6.3+deb8u1 i386 generic font configuration library - support binaries",
"ii fontconfig-config 2.11.0-6.3+deb8u1 all generic font configuration library - configuration",
"ii libfontconfig1:i386 2.11.0-6.3+deb8u1 i386 generic font configuration library - runtime"
]
}
ok: [192.168.40.134] => {
"dpkg.stdout_lines": [
"ii fontconfig 2.11.0-6.3+deb8u1 amd64 generic font configuration library - support binaries",
"ii fontconfig-config 2.11.0-6.3+deb8u1 all generic font configuration library - configuration",
"ii libfontconfig1:amd64 2.11.0-6.3+deb8u1 amd64 generic font configuration library - runtime"
]
}
ok: [192.168.40.135] => {
"dpkg.stdout_lines": [
"rc fontconfig 2.11.0-6.3 amd64 generic font configuration library - support binaries",
"rc fontconfig-config 2.11.0-6.3 all generic font configuration library - configuration",
"rc libfontconfig1:amd64 2.11.0-6.3 amd64 generic font configuration library - runtime"
]
}
PLAY RECAP ********************************************************************
192.168.40.132 : ok=3 changed=1 unreachable=0 failed=0
192.168.40.133 : ok=3 changed=1 unreachable=0 failed=0
192.168.40.134 : ok=3 changed=1 unreachable=0 failed=0
192.168.40.135 : ok=3 changed=1 unreachable=0 failed=0
我想过滤掉包含例如版本为2.11.0-6.3的服务器的IP地址,但不包括2.11.0-6.3 + deb8u1。 目前我正在使用以下命令进行过滤($ ver以前是从直接输入中读取的):
cat output.txt | grep -B 3 $ver
这么好,到目前为止还好,但上面提到的情况不起作用。 所以我尝试使用
part1="'(^| )";
part2="( |$)'";
done=$part1$ver$part2;
cat output.txt | grep -E $done -B 3
但是收到错误:
grep: »(« or »\(« without closing bracket
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
的用法
cat output.txt | grep -E "$done" -B 3
或
cat output.txt | grep -E '$done' -B 3
有效,但我没有得到任何输出。
请帮忙。 谢谢!
答案 0 :(得分:1)
要获得与2.11.0-6.3
匹配的IP地址,请尝试:
$ awk '/ 2.11.0-6.3 /{print $1}' RS='ok:' output.txt
[192.168.40.135]
使用shell变量指定版本:
$ ver='2.11.0-6.3'
$ awk -v ver="$ver" '$0~(" " ver " "){print $1}' RS='ok:' output.txt
[192.168.40.135]
请注意,ver
被视为正则表达式。这意味着必须转义像+
这样的正则表达式活动字符。