Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何使用sed仅打印第一个非空行_Shell_Unix_Awk_Sed_Text Parsing - Fatal编程技术网

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

Shell 如何使用sed仅打印第一个非空行,shell,unix,awk,sed,text-parsing,Shell,Unix,Awk,Sed,Text Parsing,给定以下文件,其中第1行为空: \n Line 2\n Line 3\n 如何使用sed只输出“第2行” 欢迎使用其他标准UNIX工具(例如awk)的解决方案。带注释的多行版本 无注释的单行版本 使用带有-m开关的grep版本,例如或grep: 这将在匹配1行后停止读取文件匹配任何字符,因此第一个非空行将匹配 使用任何版本的awk(基本上与sed版本相同): 如果您有一个空行,则示例可以使用,但如果您有一个包含空格或制表符等字符的行,则示例不起作用 我认为即使“空白”行包含空格或制表符,这个版

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

\n
Line 2\n
Line 3\n
如何使用sed只输出“第2行”

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

带注释的多行版本 无注释的单行版本
使用带有
-m
开关的grep版本,例如或grep:

这将在匹配1行后停止读取文件<代码>匹配任何字符,因此第一个非空行将匹配

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


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

我认为即使“空白”行包含空格或制表符,这个版本也可以工作

sed'/[^[:blank:]/q;d'文件


awk'NF{print;exit}'
也将根据它们是否将空白计算在内而起作用。非标准的
-m
扩展于2017年12月9日添加到OpenBSD的grep(1)中。美好的甚至比sed更简单。我可能会说
sed'//q;d'文件
,但两者都可以。@Wintermute,非常好。我没有意识到在退出之前该行会被回音。如果没有给sed提供
-n
选项,则会回音<在这方面,code>q与
n
类似。在这种情况下,这种行为可以很好地使用,但老实说,它经常令人烦恼。GNU sed有一个
Q
命令,因此无论
-n
如何,该命令都会在不打印的情况下退出。
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
grep -m 1 . file
awk '/./{print;exit}' file