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ので、もっと面白いことが起こっていると仮定する必要があるので、質問を解決する2つのオプションも尋ねました。

ここでできることは2つあります。IFS(InternalField Separator)を改行に設定して既存のコードを使用するか、whileループでreadorコマンドを使用することができます。line

IFS="
"

また

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

問題は、一度に1行全体をどのように読むかということだったと思います。以下の簡単なスクリプトでこれを行います。「読み取り」に変数名を指定しない場合、行全体が変数$REPLYに詰め込まれます。

catfile.txt|読み取り中; $REPLYをエコーし​​ます。終わり

デイブ..

于 2011-02-07T15:31:01.930 に答える
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
于 2011-01-27T05:54:55.510 に答える
-2

試す

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

読み取り:標準入力から行を読み取り、フィールドに分割します。

標準入力から、または-uオプションが指定されている場合はファイル記述子FDから1行を読み取ります。行は単語分割と同様にフィールドに分割され、最初の単語は最初のNAMEに割り当てられ、2番目の単語は2番目のNAMEに割り当てられ、残りの単語は最後のNAMEに割り当てられます。$IFSで見つかった文字のみが単語区切り文字として認識されます。

于 2011-01-27T05:42:45.057 に答える