仅使用 grep 查找第一次出现

Atc*_*kar 7 grep patterns

假设我有一个包含很多单词的文件,我只想找到模式为“xyz”的第一个单词。如果同一行中有多个具有此模式的单词,我该怎么办? -m返回匹配的第一行中的所有单词。我只需要 grep 命令。

dr_*_*dr_ 15

默认情况下grep打印与模式匹配的,因此如果模式在一行中出现一次或多次,grep将打印整行。

添加标志-m 7将告诉grep仅打印图案出现的前 7 行。

所以这应该做你想做的(我没有测试过):

grep -o -m 1 xyz myfile | head -1
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Kusalananda 所指出的,您并不严格需要该-m标志,但使用它意味着grep不需要解析整个文件,并且会更快地输出结果,特别是如果myfile是一个大文件。

  • 不需要`-m 1`。`-o` 返回的匹配项将在单独的行中,而 `head -1` 将选择第一个匹配项。删除 `-m 1` 将使 `grep` 遍历整个文件(或者当它注意到它不能再写入 stdout 因为 `head` 已经退出时停止),但它使它可以移植到其他不这样做的 Unices没有 `-m` 标志 (BSD)。 (4认同)
  • @AtchyutSreekar 不,那不会,它会从第一行获取所有匹配的模式。您需要将其通过管道传输到 head -1 以首先获得真实数据。 (2认同)