我正在尝试使用这段代码。而我正在使用变量$ 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
所以我正在寻找的日志文件行看起来像这样。
Tue Jun 28 10:58:57 machinename进程:执行SSH MOTD标语
答案 0 :(得分:0)
更改为
pkgname="SSH MOTD banner" # Here use quotes to avoid using \
正如[ @jack ]中正确指出[ comment ],您需要使用中性引号"
来扩展变量。也就是说你可以将正则表达式简化为
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)"