Bash字符串包含的数字不是0
我有一个bash命令,它输出类似的内容。上面和下面都有线Bash字符串包含的数字不是0,bash,Bash,我有一个bash命令,它输出类似的内容。上面和下面都有线 > ... > server1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 > server2 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 >
> ...
> server1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
> server2 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
> server3 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
> ...
我试图确定在这些输出中是否存在除changed=0以外的任何数字,不管是哪一个,只要确定在changed=之后,输出中是否包含除0以外的任何数字即可
这是我得到的最好的,但显然不起作用:
#!/usr/bin/env bash
output=`mycommand`
if [[ $output != *"changed=0"* ]]; then
# Run more code here
fi
您需要更具体地说明“不同于更改的=0”的含义:您是指“更改的=x”,其中x可以是1到9之间的任何值(负数是否可能,浮点数如何)?或者你的意思是“更改=错误”、“更改=正确”也可以吗 如果要查找x介于1和9之间的“changed=x”,可以使用正则表达式:
changed=[1-9]
如果您正在查找除“changed=0”之外的任何内容都可以的情况,您可以选择:
grep -v "changed=0"
如果还有其他可能的情况(负数、浮点数等),请相应地编辑您的问题。有很多很多方法可以确定这一点。假设您只是在查找任何已更改的字符串,那么您可以使用:
res=$(echo "$output" | grep -P "changed=[^0]")
if [[ $? -eq 0 ]]; then
# Run more code here
fi
if [[ $output =~ changed=[1-9] ]]; then
echo "work"
fi
过滤掉更改的=0行后,可以测试文本的存在:
filtered=$(echo "$output" | grep -v 'changed=0')
if [[ -n $filtered ]]; then
echo "work"
fi
但是,如果您的行不是已更改的行,则这不起作用,因此您可以执行以下操作:
filtered=$(echo "$output" | grep 'changed=' | grep -v 'changed=0')
if [[ -n $filtered ]]; then
echo "work"
fi
mycommand | grep-v'changed=0'
它接受一个通配符,如果使用=~
表单,它接受一个正则表达式,因此类似于[$output=~changed=[1-9]]
应该匹配,如果有一行匹配的changed=
后跟1-9
中的任何数字,谢谢@Petesh,显然是=
而不是~=
,但这很有效!