由此:
1
2
3
4
5
6
结果应该是这样的:
1
2
3
4
5
6
答案1
这只会删除空白行。如果您正在操作的只是输出,则可以删除“文件”:
sed '/^[[:space:]]*$/d' file
它作用于所有以空格开头、包含空格和结尾的行。
如果您想直接编辑该文件而不是将其发送到标准输出:
sed -i '/^[[:space:]]*$/d' file
输出
1
2
3
4
5
6
答案2
cut
命令不是满足此要求的正确工具,但是我们可以构建一个命令来获得所需的结果(或者你应该使用的工具):
<infile cut -d$'\n' -f1$(printf '%s' ,{3..18..2})
{min..max..step}
是bash 大括号扩展产生,3,5,7,9,11,...
输出(生成奇数字段数字以剪切-f
选项-f1,3,5,7,11,...
);选择最大限度如果输入文件的行数未知,则使用一个很大的数字。
这只选择奇数行,因此它不会跳过您认为的空行。
答案3
cut
主要是提取特定的工具列来自数据(与相反paste
)。因此,它可能不是删除/提取文本行的正确工具。
GNUsed
可用于删除从第 2 行开始的第二行:
$ sed '2~2d' file
1
2
3
4
5
6
...或者从第 1 行开始每隔一行打印一次(忽略其他行):
$ sed -n '1~2p' file
1
2
3
4
5
6
地址x~y
范围指的是 line x
,然后是y
之后的每一行(这是sed
对 standard 的 GNU 扩展sed
)。
答案4
awk NF
是你所需要的全部。 NF 是字段数,由空格界定。零是一个假布尔值,因此不会打印这些行。