0

我想从消息日志中过滤掉日期戳并删除所有出现的事件:(基本上这是 USB 历史清理脚本的一部分,head -n1 仅因测试而添加)

delimiter=`echo $HOSTNAME | cut -f1 -d.`

for item in `egrep usb /var/log/messages | awk -F"$delimiter" '{print $1}' | uniq | head -n1`; do
echo ${item}
done

当我运行这个命令时:

egrep usb /var/log/messages | awk -F"$delimiter" '{print $1}' | uniq | head -n1

输出很好:

Mar 31 03:25:03

但是当它返回给 for 循环时,由于空格,数据会像这样传输:

Mar
31
03:25:03

问题是:我怎样才能防止这种行为?

4

1 回答 1

2

代替:

for item in `whatever`; do
echo ${item}
done

采用:

whatever |
while IFS= read -r item; do
echo "${item}"
done

但是您的整个脚本可以重写为:

awk -F"${HOSTNAME%%.*}" '/usb/ && !seen[$1]++ {print $1}' /var/log/messages
于 2013-04-04T15:36:22.467 回答