Sed,从文本中提取行

Sed,从文本中提取行

我真的很想知道如何使用 sed 从文本文件中提取一些行,但我想按间隔提取行:

例如提取数字 i=1:2:100 的行

这样我就可以提取第 1、3、5 行......等等,直到 100 行

我自己尝试使用 sed 命令,但没能找到解决方案,在网上也没有找到任何东西

我知道使用 python 可能有更好的方法,但我不太熟悉它!提前谢谢

答案1

这需要在纯 sed 中进行大量的手动工作,但 Bash 可以帮助您。

sed -n $(for i in {1..100..2}; do echo -n " -e ${i}p"; done)

解释

在 sed 中,你可以使用p命令在行号后,例如1p打印文件的第一行。要禁用打印其他行,请添加选项-n

如果需要指定多行,即多个 sed 表达式,必须-e在每个表达式前使用。

因此对于第 1、3、5 行,结果是:

sed -n -e 1p -e 3p -e 5p

生成行号列表

但是,手动列出所有小于 100 的奇数会非常耗时。您可以使用 Bash 来生成列表。

命令echo {1..100..2}生成所有小于 100 的奇数列表。您可以使用以下for命令将数字放入所需的括号中:

$ for i in {1..100..2}; do echo -n " -e ${i}p"; done
 -e 1p -e 3p -e 5p -e 7p -e 9p -e 11p -e 13p -e 15p -e 17p -e 19p -e 21p -e 23p -e 25p -e 27p -e 29p -e 31p -e 33p -e 35p -e 37p -e 39p -e 41p -e 43p -e 45p -e 47p -e 49p -e 51p -e 53p -e 55p -e 57p -e 59p -e 61p -e 63p -e 65p -e 67p -e 69p -e 71p -e 73p -e 75p -e 77p -e 79p -e 81p -e 83p -e 85p -e 87p -e 89p -e 91p -e 93p -e 95p -e 97p -e 99p

要将此命令的结果包含for到另一个命令中,请使用命令替换$(command)

将输入传递给 sed

如果要将文件传递给 sed,请将其作为最后一个参数提供。否则,sed 期望输出为标准输入

将输出保存到文件

如果你想将输出保存到文件,只需附加> filename到命令以重定向 sed 的标准输出进入文件。

相关内容