我真的很想知道如何使用 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 的标准输出进入文件。