2016-04-14 7 views
1

は基本的に私はとのトラブルを抱えていますものです:ファイル*読書ではなく、各単語

私が取得します:

AdvDataStructures.text.ref: ASCII text 
makefile:     ASCII make commands text 
makelib:     ASCII English text 
README.txt:     ASCII Pascal program text 
shell3_2016.sh:    ASCII text 
shell3_2016.sh~:   ASCII text 
smallTestDir:    directory 
smallTestDir.text.out:  empty 
smallTestDir.text.ref:  ASCII text 
testarg0.text.ref:   ASCII text 
testarg1.text.ref:   ASCII text 
testbaddir.text.ref:  ASCII text 

私は

for i in `file *` 
を使用する場合

iのためにスペースで区切られた各単語を読み込みます。 AdvDataStructures.text.ref:ASCIIテキストですので、パターンを調べることができます。

また、どのようにして私が行を読んでいるか分からないので、私は何とか呼び出されるファイル内の行の量を読みなければなりません。出力の最初の単語を呼び出すのが好きなので、ファイル名を読み込む方法はありますか?

基本的には、パターンがマッチすると、一度に1行(AdvDataStructures.text.ref:ASCIIテキスト)で読み込まれます(私はegrepでこれを行う方法を知っています)それは通常の方法はwhile readループを使用することです

+1

あなたは[と行を読んでいない理由です'for'](http://mywiki.wooledge.org/DontReadLinesWithFor)、なぜ[Bash FAQ 001](http://mywiki.wooledge.org/BashFAQ/001)が適切にこれを行うのかということです。 (awkのような "より良い"ツールを使いたくないと仮定して) –

答えて

0

)AdvDataStructures.text.ref(ファイル内の行数をカウントします:

file * | while read filename description; do 
    filename=${filename%:} # remove : after filename 
    ... 
done 
+0

最初に働いた人、ありがとう!もう1つの質問ですが、これを行うときに出力の残りの部分からファイル名を分割する方法を知っていますか? – jskozyu