我有一个名为file.txt
.如何仅使用grep
命令打印第一行?
答案1
虽然这是 grep 的一个非常规应用程序,但您可以使用 GNU grep 来完成它
grep -m1 "" file.txt
它之所以有效,是因为空表达式匹配任何内容,而-m1
导致 grep 在第一个匹配后退出
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
答案2
这可不是什么事grep
。 “grep”这个名字本身就是“全球搜索正则表达式并打印”,这就是该ed
命令的作用g/re/p
(对于给定的正则表达式re
)。
ed
是 1969 年推出的交互式行编辑器,但今天它很可能已安装在您的系统上(它是标准 POSIX 工具)。我们grep
从ed
, 中得到,它可以被视为 ,ed
和的特定功能的快捷方式或别名sed
,即“stream- ed
”,即(非交互式)流编辑器。
让我们改用sed
:
sed -n '1p' file.txt
该1p
字符串是一个微小的sed
“脚本”,用于打印 ( p
) 与给定地址对应的行(1
,第一行)。顺便说一句,编辑命令1p
(毫不奇怪)会在编辑器中执行相同的操作。ed
抑制-n
脚本未显式打印的任何内容的输出,因此我们得到的只是文件的第一行file.txt
。
或者:
sed '1q' file.txt
这将打印文件的所有行,但q
在第 1 行处退出 ( )(打印后)。这完全等同于head -n 1 file.txt
.
在 POSIX 标准中(在head
命令的基本原理部分)它说(释义)与head -n N
非常相似sed 'Nq'
,即“打印每一行,但在该行退出N
”。之所以head
被包含在标准中,是因为tail
与现有 Unix 实现的对称性和向后兼容性。
答案3
除非第一行有一个唯一的字符串,否则不能仅使用 grep 来完成此操作。 head -n 1 file.txt
将在其位置上工作。
如果您只想打印与模式匹配的第一行,则将 head 通过管道输入 grep
head -n 1 * | grep [pattern]
答案4
这是我用来在 df 输出上获取标头的方法。基本上两个命令按“;”顺序运行。 df -h |头-n1; df -h | grep sda1