如何使用grep命令打印第一行?

Nit*_*osh 34 grep

我有一个名为file.txt. 如何仅使用grep命令打印第一行?

ste*_*ver 57

尽管它是 grep 的非常规应用程序,但您可以使用

grep -m1 "" file.txt
Run Code Online (Sandbox Code Playgroud)

它起作用是因为空表达式匹配任何内容,而-m1导致 grep 在第一次匹配后退出

-m NUM, --max-count=NUM
       Stop reading a file after NUM matching lines.
Run Code Online (Sandbox Code Playgroud)

  • 这可能适用于某些系统,但不可移植:`grep: unknown option -- m` (4认同)
  • 注意“第一行”和“第一行匹配”之间的区别 (3认同)

Kus*_*nda 18

这不是东西吗grep。名称“grep”本身是“全局搜索正则表达式并打印”的首字母缩写词,这就是ed命令的g/re/p作用(对于给定的正则表达式re)。

ed是 1969 年的交互式行编辑器,但它最有可能安装在您今天的系统上(它是标准的 POSIX 工具)。我们grep来自ed, 它可以被看作是ed, 和的特定功能的快捷方式或别名,即sed“stream- ed”,即(非交互式)流编辑器。

让我们sed改用:

sed -n '1p' file.txt
Run Code Online (Sandbox Code Playgroud)

1p字符串是一个微小的sed“脚本”,用于打印 ( p) 对应于给定地址的行(1,第一行)。顺便说一下,编辑命令1p会(毫不奇怪)在ed编辑器中做同样的事情。

-n抑制的任何脚本所没有明确的打印输出,所以我们得到的是该文件的第一行file.txt

或者:

sed '1q' file.txt
Run Code Online (Sandbox Code Playgroud)

这将打印文件的所有行,但q在第 1 行(打印后)退出 ( )。这完全等同于head -n 1 file.txt.

在 POSIX 标准中(在命令的基本原理部分head),它说(释义)与head -n N非常相似sed 'Nq',即“打印每一行,但在一行退出N”。之所以head包含在标准中,是因为tail与现有的 Unix 实现对称和向后兼容。


小智 7

除非第一行有一个唯一的字符串,否则您不能仅使用 grep 来执行此操作。 head -n 1 file.txt将在它的位置工作。

如果您只想打印第一行,如果它与模式匹配,则管道头进入 grep

head -n 1 * | grep [pattern]