我有简单的Ansible游戏,在远程机器上运行shell:
命令,返回类似这样的内容
ok: [proxmox] => {
"CONTAINER_INFO": {
"changed": true,
"cmd": "pct list | grep -w test",
"delta": "0:00:00.463029",
"end": "2017-10-13 22:21:22.428399",
"failed": false,
"rc": 0,
"start": "2017-10-13 22:21:21.965370",
"stderr": "",
"stderr_lines": [],
"stdout": "100 stopped test ",
"stdout_lines": [
"100 stopped test "
]
}
}
我需要的唯一有用信息是stdout
上的数字100
。
有没有办法像
grep
命令一样过滤掉这个命令只返回100
?
到目前为止,我得到的最好的是:
ok: [proxmox] => {
"CONTAINER_INFO": {
"changed": true,
"cmd": "pct list | grep -w test | grep -Eo [[:digit:]]",
"delta": "0:00:00.477083",
"end": "2017-10-13 22:26:03.258617",
"failed": false,
"rc": 0,
"start": "2017-10-13 22:26:02.781534",
"stderr": "",
"stderr_lines": [],
"stdout": "1\n0\n0",
"stdout_lines": [
"1",
"0",
"0"
]
}
}
Pure Bash
root@pve:~# pct list | grep -w "test"
100 stopped test
root@pve:~# pct list | grep -w "test2"
101 running test2
在这种情况下,列表并没有真正帮助我。
任何帮助都表示赞赏,并提前致谢。
答案 0 :(得分:1)
我认为您正在寻找Ansible filters。这将允许您在Ansible中使用正则表达式获取值100
。
答案 1 :(得分:0)
使用 awk :
$ cat input.txt | awk 'match($0, /"stdout":\s*"([0-9]+)/,a){print a[1]}'
100
使用 perl :
$ cat input.txt | perl -n -e '/"stdout":\s+"(\d+)/ && print $1,"\n"'
100