我有一个 shell 脚本 (test1.sh),它返回以下输出
Employee ID emp Type return type Admin User
us321000034006755 ITdept access Itadminuser
我想检查输出是否包含字符串 ITdept,因为我使用了以下命令:
if ./test1.sh | grep -q 'ITdept';
then
echo "found"
else
echo "Not found"
fi
除此之外,我还想检查字符串 Employee ID us321000034006755,因为它不会使用我正在使用的命令返回任何富有成效的结果,不确定如何完成此操作。我错过了什么吗?任何建议都会很好
答案1
假设输出将包含字符串us321000034006755(separator)ITdept
:
if cmd | grep -q '[[:<:]]us321000034006755[[:>:]][[:space:]]*[[:<:]]ITdept[[:>:]]'; then
...
fi
如果变量中有两个子字符串:
if cmd | grep -q "[[:<:]]$user_id[[:>:]][[:space:]]*[[:<:]]$user_dept[[:>:]]"; then
...
fi
和[[:<:]]
将[[:>:]]
在单词边界上匹配。
使用 来做到这一点会容易得多awk
,正如罗曼·佩雷赫雷斯特所建议的那样, 或者
cmd | awk '$1 == "us321000034006755" && $2 == "ITdept" { print "found"; exit } END { print "not found" }'
答案2
如果输出始终只包含 2 行 -awk通过多个字段检查的解决方案:
awk 'NR==2 {
printf "%s%s\n",($1=="us321000034006755" && $2=="ITdept")? "":"not ","found"
}' <(sh ./test1.sh)
答案3
如果您需要在另一个脚本中执行此检查,您可以使用以下命令来执行此操作:
#!/bin/bash
var=$(./test1.sh | grep -c ITdept)
if [ $var > 0 ];
then
echo "found"
else
echo "Not found"
fi
脚本计算包含一个或多个“ITdept”单词的字符串数量。
或者单行(使用 awk):
./test1.sh | grep -c ITdept | awk '{if ($0==0) print "not found"; else if ($0>0) print "found"}'
如果我误解了你的任务,请纠正我。