我在Mac OS 10.14.6上,有一个包含数百个文本文件的目录。
在终端中,我想显示每个文件的第一行的列表。我该怎么做?
我尝试过的步骤
在谷歌上搜索一下,我认为解决方案是使用一个名为head
的命令。这是我尝试过的命令:head -n 1 *
但是,它会产生如下输出:
==> Minutes.txt <==
Minutes of the meeting
==> Daily Report.txt <==
Daily Report for Feb
==> Important incidents.txt <==
Incidents that happened yesterday
我不想要File 1.text
标题。我只希望它是一个这样的列表:
Minutes of the meeting
Daily Report for Feb
Incidents that happened yesterday
根据this page,您可以使用以下任意一个命令来删除标题:
-q, --quiet, --silent
所以我修改了我的命令如下:
head -n1 -q *
但它会产生以下错误消息:
head: illegal option -- q
usage: head [-n lines | -c bytes] [file ...]
我怎么能显示一个列表的第一行的每个文件没有头。解决方案不必使用head
,尽管从我的研究来看,这似乎是最好的方法。
4条答案
按热度按时间3phpmpom1#
yzckvree2#
我猜您的
head
版本不支持-q
选项;man head
(在Mac上运行)显示什么?小型
awk
解决方案:当一个文件被处理时,第一行被打印出来,然后我们跳到下一个文件;最终结果是我们只打印每个文件的第一行。
请记住,这可能会产生一些奇怪的结果,这取决于什么匹配
*
。二进制文件?目录?zpjtge223#
我没有Mac来测试这个,但我认为这是两个选择。
**选项1.**使用tail获取head输出的最后一行。
如果迭代每个文件,可以使用
tail -n 1
来修剪head
的输出,例如:如果你不想重复输入,你可以定义一个函数,例如。
然后调用函数
line1 *
。你可以把它放在你的.bashrc中,以使它在打开一个新的终端后保持可用。
**选项2.**安装coreutils
-q
选项不起作用,因为一些操作系统使用的是gnu核心实用程序中不同的可执行文件。你应该能够安装gnu-coreutils:给予你就可以访问
ghead
head的gnu实现,它应该支持-q
选项。也有一些选项可以让coreutils覆盖默认的系统实用程序,但由于我没有Mac,我无法确认如何做到这一点。
这里有一个答案,建议如何做到这一点:https://apple.stackexchange.com/questions/69223/how-to-replace-mac-os-x-utilities-with-gnu-core-utilities#answer-69332
它建议您在路径中预先添加实用程序:
与上面的函数解决方案一样,您可能需要将其添加到.bashrc以使其在终端会话中持久化。
r1zhe5dt4#
我希望grep版本在Mac中应该是可以接受的,正如本讨论的第二个答案中所解释的(https://askubuntu.com/questions/701514/how-to-select-the-first-line-from-each-file-in-a-directory-and-print-it-into-a-n)
grep -m 1 '.' .txt >output.file
grep将匹配任何字符,并将在第一次匹配后退出,即grep将输出所有输入文件的第一行,我们将它们保存在out.txt中。
[* 这只是复制/粘贴上述链接。]
为了跳过/忽略第一行,可以这样修改:
grep -m 1“^[^=]”.txt #这应该跳过第一行
第一个^指的是行的开头,所以注解从第一个字符开始的行不会被排除。[^=]表示任何不以'='开头的行。