如何防止bash for循环转换字符串数据

时间:2013-04-04 14:59:47

标签: bash awk grep

我想从消息日志中过滤出日期戳并删除所有出现的内容: (基本上这是一个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

问题是:我该如何防止这种行为?

1 个答案:

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