grep变量和空格的问题

时间:2017-06-28 20:59:05

标签: linux bash unix grep

我正在尝试使用这段代码。而我正在使用变量$ 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标语

1 个答案:

答案 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)"