Por*_*ine -1 sed gnu text-processing
我试图删除第 3 行之后的所有空行,直到文件末尾:
cat ${File}
1
2
3
4
5
5
6
7
8
9
sed -e '3,${s~^$~~g}' ${File}
1
2
3
4
5
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
观察:输出没有变化。
期望输出
1
2
3
4
5
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
尝试:
sed '4,$ {/^$/d}' infile
Run Code Online (Sandbox Code Playgroud)
从4开始日线,直到该文件结束时,删除该空行。
您的命令的问题是您再次用空字符串 in s~^$~~g
(与 相同s~^$~~
)替换空行,并且您没有删除它。
注意:此外,由于您使用默认 slash 以外的不同分隔符/
,要使用此样式,~^$~d
您需要转义第一个~
以告诉sed
它不是您的正则表达式的一部分:
sed -e '4,${ \~^$~d }' infile
Run Code Online (Sandbox Code Playgroud)
请参阅man sed
“地址”下的内容:
\c regexp c 匹配与正则表达式regexp匹配的行。所述Ç可以是任何字符。
如果您想删除空行以及仅包含空格(制表符/空格)的行,您可以执行以下操作:
sed '4,${ /^[[:blank:]]*$/d }' infile
Run Code Online (Sandbox Code Playgroud)
另一种awk
解决方案:
awk 'NR<=3||NF' file
Run Code Online (Sandbox Code Playgroud)
这将打印所有行号小于或等于 3 的行,或者至少有一个“字段”的行,默认情况下定义为至少一个非空白字符。这样,您还可以排除不包含“文本”但仅“视觉上”为空的行,即仍包含空格或制表符的行。