【问题标题】:Reading in output as one line, not each word将输出读取为一行,而不是每个单词
【发布时间】:2016-04-14 01:49:32
【问题描述】:

基本上我遇到的问题是当我输入: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 *`

它读入以空格分隔的每个单词 for i。我需要它在每一行中读取为: AdvDataStructures.text.ref: ASCII text ,所以我可以通过它查看模式。

另外,我不知道如何做到这一点,所以当我在该行中读取时,我必须以某种方式读取被调用文件中的行数。有没有办法喜欢调用输出的第一个单词,所以它知道读取文件名?

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

【问题讨论】:

标签: bash shell unix


【解决方案1】:

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

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

【讨论】:

  • 第一个成功了,非常感谢!还有一个问题,当这样做时..你知道如何将文件名与输出的其余部分分开吗?
猜你喜欢
  • 2011-12-18
  • 2020-12-16
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2014-02-20
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多