如何使用sed仅打印第一个非空行

时间:2015-05-06 09:57:51

标签: shell unix awk sed text-parsing

给定以下文件,第1行为空白:

\n
Line 2\n
Line 3\n

你将如何只输出"第2行和第34行;用sed?

欢迎使用其他标准UNIX工具的解决方案,例如awk。

3 个答案:

答案 0 :(得分:4)

将grep版本与-m开关一起使用,例如GNU grep:

grep -m 1 . file

这会在1个匹配行后停止读取文件。 .匹配任何字符,因此第一个非空行将匹配。

使用任何版本的awk(与sed版本基本相同):

awk '/./{print;exit}' file

答案 1 :(得分:2)

带注释的多行版本

sed -n '  # use -n option to suppress line echoing
  /./ {   # match non-blank lines and perform the enclosed functions
          # print the non-blank line, i.e., "Line 2"
          p
          # quit right after printing the first non-blank line
          q
      }
' file

没有评论的单行版

sed -n '/./{p;q;}' file

答案 2 :(得分:0)

如果您有一个空行,示例可以工作,但如果您的行包含空格或制表符等字符,则不行。

我认为即使“空白”行包含空格或制表符,此版本也能正常工作。

  

sed'/ [^ [:blank:]] / q; d'file