如何从bash中读取整行

时间:2011-01-27 05:35:47

标签: bash shell parsing lines

我有一个文件file.txt,内容如

i love this world

I hate stupid managers
I love linux

I have MS

当我执行以下操作时:

for line in `cat file.txt`; do
echo $line
done

它提供类似

的输出
I
love
this
world
I
..
..

但我需要输出如下所示的整行 - 任何想法?

i love this world

I hate stupid managers
I love linux

I have MS

5 个答案:

答案 0 :(得分:16)

while read -r line; do echo "$line"; done < file.txt

答案 1 :(得分:6)

正如@Zac在评论中指出的那样,你发布的问题的最简单的解决方案只是cat file.txt所以我必须假设有一些更有趣的东西,所以我把两个选项解决了问题以及:

您可以在此处执行两项操作,或者将IFS(内部字段分隔符)设置为换行符并使用现有代码,或者您可以使用readline while循环中的命令

IFS="
"

(while read line ; do
    //do something
 done) < file.txt

答案 2 :(得分:1)

如果文件进入stdin,你可以使用read来完成。如果您需要在已将stdin用于其他目的的脚本中间执行此操作,则可以临时重新分配stdin文件描述符。

#!/bin/bash
file=$1 

# save stdin to usually unused file descriptor 3
exec 3<&0

# connect the file to stdin
exec 0<"$file"

# read from stdin 
while read -r line
do
    echo "[$line]"
done

# when done, restore stdin
exec 0<&3

答案 3 :(得分:1)

我认为问题是如何一次读完整行。下面的简单脚本将执行此操作。如果没有为“read”指定变量名,它会将整行填入变量$ REPLY。

cat file.txt | while read;回声$ REPLY;完成

戴夫..

答案 4 :(得分:-1)

尝试

(while read l; do echo $l; done) < temp.txt
  

阅读:从标准中读取一行   输入并将其拆分为字段。

     

从标准输入或文件中读取一行   描述符FD       如果提供了-u选项。该行与单词一样分为字段       分裂,第一个单词分配给第一个NAME,第二个单词分配给第一个NAME       单词指向第二个NAME,依此类推,指定任何剩余的单词   至       最后一个名字。只有在$ IFS中找到的字符才是   被认为是单词       分隔符。