我正在尝试在C中获得一个简单的myhead
命令,以显示目录中前五个.HTML文件的前10行。我被建议使用ls与我的myhead
命令一起执行此操作。我的主要问题是让ls只显示5个.html文件,而不是全部列出。
我在想这样的事情
ls *.html -n 5 > myhead
但是,这不存在。有任何想法吗?我们只打算使用ls
和myhead
。
答案 0 :(得分:1)
如果我理解正确,你已经编写了一个C程序myhead
,它打印出传入的十行文件。
你绝对不想这样做
ls *.html -n 5 > myhead
这将在当前目录中覆盖或创建新文件myhead
。
实现此目标所需的关键是命令行管道。这允许一个命令的stdout成为下一个命令的stdin。您还需要command substitution将一个命令的stdout输出或管道命令用作另一个命令的文本。历史上这已经使用反引号`ls`完成,或者在bash中你可以使用$(ls)
作为示例来获取ls
列表并将其用作另一个命令的文本。
鉴于您对标准ls
文件列表顺序没有问题,您可以执行此操作以获取前5个.html文件:
ls *.html | head -n 5
我不知道myhead
是什么或它是如何工作的,因为它没有在问题中解释。你说它显示传入其中的文件的前十行。可能会有一些它做到这一点。
我将为每种可能性提供一个解决方案(假设您正在使用bash):
for f in $(ls *.html | head -n 5) ; do myhead $f ; done
myhead $(ls *.html | head -n 5)
for f in $(ls *.html | head -n 5) ; do cat $f | myhead ; done
答案 1 :(得分:0)
使用标准的Unix head
命令,您可以执行以下操作:
head -n 10 $(ls | head -n 5)
首先,您应该完全按照shell中所示运行此命令,以验证它是否有效。接下来,使用myhead
命令代替head
进行尝试。