11

我有一个文件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
4

5 回答 5

22
while read -r line; do echo "$line"; done < file.txt
于 2011-01-27T05:39:16.127 回答
6

正如@Zac 在评论中指出的那样,您发布的问题的最简单解决方案很简单cat file.txt,所以我必须假设发生了一些更有趣的事情,所以我也提出了解决问题的两个选项:

您可以在这里做两件事,您可以将IFS(Internal Field Separator) 设置为换行符并使用现有代码,或者您可以在 while 循环中使用reador命令line

IFS="
"

或者

(while read line ; do
    //do something
 done) < file.txt
于 2011-01-27T05:39:49.667 回答
2

我相信问题是如何一次阅读整行。下面的简单脚本将执行此操作。如果你没有为“read”指定一个变量名,它会将整行填充到变量 $REPLY 中。

cat file.txt|读取时;回声 $REPLY; 完毕

戴夫..

于 2011-02-07T15:31:01.930 回答
1

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

#!/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
于 2011-01-27T05:54:55.510 回答
-2

尝试

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

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

从标准输入读取单行,如果提供了 -u 选项,则从文件描述符 FD 读取。与分词一样,该行被分成多个字段,第一个单词分配给第一个 NAME,第二个单词分配给第二个 NAME,依此类推,任何剩余的单词都分配给最后一个 NAME。只有 $IFS 中的字符被识别为单词分隔符。

于 2011-01-27T05:42:45.057 回答