从文件中提取每n行,包括bash中的空行

And*_*ers 1 bash awk sed cat

我正在使用bash从文件中提取行,如下所示:

for line in $(sed -n 3~6p  file)
do
    echo $line
done
Run Code Online (Sandbox Code Playgroud)

但是,我现在有些行是空的/空白的,并且这些行没有打印,因此在表单上给我一个输出:

line3
line9
line21
line27
Run Code Online (Sandbox Code Playgroud)

我想要打印空行,以便我获得:

line3
line9

line21
line27
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一点的任何建议?

use*_*342 7

使用该read命令逐行读取输入:

sed -n 3~6p file | \
while read line
do
    echo "$line"
done
Run Code Online (Sandbox Code Playgroud)

除了省略空行之外,使用进程替换读取文件还有其他问题:它将所有sed输出读取到内存中,它省略了所有尾随空格,并且它按空格分割每一行.最后一个意味着如果你的一行包含字符串a b c,它将被打印为三个单独的行.这个while read line成语解决了所有这些问题.