1

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

for line in $(sed -n 3~6p  file)
do
    echo $line
done

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

line3
line9
line21
line27

我也希望打印空行,以便获得:

line3
line9

line21
line27

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

4

2 回答 2

7

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

sed -n 3~6p file | \
while read line
do
    echo "$line"
done

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

于 2013-04-06T20:49:00.837 回答
3

您一直有解决方案,只需删除bashfor 循环:

$ sed -n 3~6p  file

line9
line15

sed脚本从第 3 行开始每隔 6 行打印一次。如果您告诉我们您想要做什么,Bash 不是文本处理的最佳工具,也许sed可以处理整个工作,如果不是awk肯定可以。

于 2013-04-06T20:48:53.503 回答