我正在尝试使这一点代码工作。而且我用可变的$ pkgname挂在第二个管道的GREP上。我找不到正确读取变量的方法,要么没有输出,要么由于当前编写代码,我会得到GREP:非法字节序列。如果我在变量中没有空间的任何一个文本,或者作为GREP语句的一部分输入文本。
#!/bin/bash
counter=0
results2=Executing SSH MOTD banner
pkgname=SSH MOTD banner
until [ $counter = 1 ]
do
echo $counter
echo $pkgname
echo $results2
result=$(grep "$(date +"%b %d")" /var/log/test.log | grep “$pkgname” | cut -d':' -f 4 | sed 's/^ *//g')
echo $result
if [ “$result” == “$results2” ]; then
counter=1
fi
done
echo finished
所以我正在寻找的日志文件行。
6月28日星期二10:58:57 MachineName Process:执行SSH Motd Banner
更改为
pkgname="SSH MOTD banner" # Here use quotes to avoid using
正如[@jack]正确指出的[注释],您需要中性引号 "
才能扩展一个变量。也就是说,您可以将正则态度简化为以下
pkgname="SSH MOTD banner"
d=$(date +"%b %d")
result="$(awk -v FS=":" -v d="$d" -v pkg="$pkg_name" '{if($0 ~ date && $0 ~ pkg){sub(/^ */,"",$4);print $4}}' /var/log/test.log)"