Shell 如何使用sed仅打印第一个非空行
给定以下文件,其中第1行为空: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版本相同): 如果您有一个空行,则示例可以使用,但如果您有一个包含空格或制表符等字符的行,则示例不起作用 我认为即使“空白”行包含空格或制表符,这个版
\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