它通常打印一个文件,只有当它们位于一个注释块内时才显示空行,如下所示:
/*
*/
Run Code Online (Sandbox Code Playgroud)
awk '/^\/\*/ {f=1} {print f?"":$0} /\*\/$/ {f=0}'
^^^^^^ ^^^^^^^^^^^^^ ^^^^^
| | |
| | match lines ending with */
print either the line or an empty line
match lines starting with /* (\ is to escape the chars)
Run Code Online (Sandbox Code Playgroud)
分段:
/^\/\*/ {f=1}
Run Code Online (Sandbox Code Playgroud)
每当它找到以行开头的行时/*,它将f变量设置为1. ^引用beginning of string.在这种情况下,beginning of line.如果RS设置为与新行不同的内容,则可能会发生变化.
/\*\/$/ {f=0}
Run Code Online (Sandbox Code Playgroud)
每当它找到以...结尾的行时*/,它将f变量设置为0. $引用end of string.在这种情况下,end of line.
{print f?"":$0}
Run Code Online (Sandbox Code Playgroud)
打印空行或当前行(使用时访问$0).这相当于:
if (f == True)
print $0
else
print ""
Run Code Online (Sandbox Code Playgroud)
正如Ed Morton很好地评论,使用括号来避免错误更安全:
{print (f?"":$0)}
Run Code Online (Sandbox Code Playgroud)
样本文件:
$ cat a
hello
/*aa
aaa
bbbj
*/
bye
Run Code Online (Sandbox Code Playgroud)
执行:
$ awk '/^\/\*/ {f=1} {print f?"":$0} /\*\/$/ {f=0}' a
hello
bye
Run Code Online (Sandbox Code Playgroud)