在bash中从文件中删除隐藏的换行符

时间:2012-08-25 16:32:40

标签: bash

我正在使用ps命令的输出创建一个文件,如下所示。

ps aux | grep ^apache | grep sbin/[h]ttpd | awk '{print $2" "$6}' > /root/psfile.tmp

当您查看文件时,它会显示如下。

[root@testserver ~]# tail /root/psfile.tmp
16795 3184
16796 3148
16797 3148
16799 3148
16800 3148
16801 3148
16802 3148
16803 3148 
16804 3148
16805 3148

然而,当我尝试在for循环中处理它时,它正在读取一行作为两行......例如......

for x in $(tail /root/psfile.tmp.test);do echo $x;done
16795
3184
16796
3148
16797
3148
16799
3148
16800
3148
16801
3148
16802
3148
16803
3148
16804
3148
16805
3148

我需要迭代才能在一行上显示这两个数字......为什么要这样做?我怎么能绕过它呢?

谢谢!

3 个答案:

答案 0 :(得分:4)

while read one two
do
    echo "one: $one"
    echo "two: $two"
done < psfile.tmp.test

while read line
do
    echo "line: $line"
done < psfile.tmp.test

答案 1 :(得分:0)

在运行循环之前使用IFS=$'\n'

答案 2 :(得分:0)

您可以执行以下操作:

tail /root/psfile.tmp.test | while read -r a b ; do
  echo "a: $a b: $b"
done

保持代码原样,并将IFS设置为$'\n',以便仅在新行上分割for循环 - 默认情况下,它会在任何空格上分割。