2011-01-27 77 views
5

整條生產線我有一個文件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 
+2

你的問題讀起來就像你只想做'貓file.txt` – 2011-01-27 05:38:54

+0

我第二扎克,必須有更復雜的東西,你需要在這裏做的,有可能是也已經是unix工具做到這一點 – tobyodavies 2011-01-27 05:41:00

+0

對不起,可能我應該有更清晰的了,我需要一行一行地解析這些行。所以貓在我的情況下不會有幫助。 – 2011-01-27 05:42:07

回答

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

由於@Zac在評論中指出,要在發佈這個問題最簡單的解決方案就是cat file.txt,所以我必須假定有事情更有趣的東西,所以我已經把該解決的兩個選項

有兩件事情,你可以在這裏做,要麼你可以設置IFS(內部字段分隔符)爲換行,並使用現有的代碼,或者您也可以在while循環使用readline命令:如問及問題

IFS=" 
" 

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

嘗試

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

讀取:從標準 輸入讀取一行並將其分割成多個領域。

如果提供-u選項,則從標準輸入或文件描述符FD 中讀取一行。與 分詞相同,第一個詞分配給第一個NAME,第二個 詞分配給第二個NAME,依此類推,並且分配 到 到最後一個NAME的剩餘單詞。只有在$ IFS中發現的字符 被識別爲字 分隔符。

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 
1

我相信問題是如何一次讀取整行。下面的簡單腳本將執行此操作。如果您沒有爲「讀取」指定一個變量名稱,它會將整行填入變量$ REPLY。

cat file.txt | while read;做echo $ REPLY;做

戴夫..