击捕捉顺序
问题描述:
所有的数字我有一个在远程机器上运行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
数量简单Ansible戏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"
]
}
}
纯猛砸
[email protected]:~# pct list | grep -w "test"
100 stopped test
[email protected]:~# pct list | grep -w "test2"
101 running test2
名单并没有真正帮助我在这种情况下。
任何帮助表示感谢,并提前感谢。
答
使用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
答
我认为你正在寻找Ansible filters。这将允许您在Ansible中本地使用正则表达式获取值100
。
+0
不幸的是,过滤器并不能帮助我,因为它会返回“101”:“101”',但是感谢您花时间回答。 –
这是一个通用的bash答案。虽然它可以在Ansible中工作,但我认为过滤器是更好的选择。 –
OP没有提到有效的版本。过滤器仅从版本2.2开始工作。所以,是的,我的解决方案是通用的。不,它不是bash,它适用于任何外壳。 –
我得到的输出就是这个'100停止测试'的例子,所以当我尝试用上述任何一种方法进行过滤时,我在-e第1行附近得到'语法错误,在\“+附近)perl和'语法错误在或接近['for awk。由于某种原因,我无法逃脱或者我做错了某些事情 –