读取输出作为一行,而不是每个单词

时间:2016-04-14 01:49:32

标签: bash shell unix

基本上我遇到麻烦的是当我输入:file *

我会得到:

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文本,所以我可以查看它的模式。

另外,我不知道怎么做到这一点当我读到这行时,我不得不读取被调用文件中的行数。有没有办法喜欢调用输出的第一个单词,所以它知道读取文件名?

基本上,我必须做的一个例子是一次读取一行(AdvDataStructures.text.ref:ASCII文本),如果模式在其中找到匹配(我知道如何使用egrep执行此操作)它将计算文件中的行数(AdvDataStructures.text.ref)

1 个答案:

答案 0 :(得分:0)

通常的方法是使用while read循环:

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