删除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

我需要for迭代在一行上显示两个数字。。。它为什么要这样做,我该如何避开它?

谢谢!

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

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

您可以执行以下操作:

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

保持代码原样,并将IFS设置为$'n',以使for循环仅在新行上进行拆分——默认情况下,它在任何空白处进行拆分。

最新更新