我想从消息日志中过滤出日期戳并删除所有出现的内容: (基本上这是一个usb历史记录清理器脚本的一部分,头部-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
问题是:我该如何防止这种行为?
答案 0 :(得分: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