我有一个文件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
答案 0 :(得分:16)
while read -r line; do echo "$line"; done < file.txt
答案 1 :(得分:6)
正如@Zac在评论中指出的那样,你发布的问题的最简单的解决方案只是cat file.txt
所以我必须假设有一些更有趣的东西,所以我把两个选项解决了问题以及:
您可以在此处执行两项操作,或者将IFS
(内部字段分隔符)设置为换行符并使用现有代码,或者您可以使用read
或line
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中找到的字符才是 被认为是单词 分隔符。