sed:如何将一系列行打印到文件末尾

时间:2015-10-01 14:05:32

标签: bash sed

我可以使用此cmd从文件中打印一系列行:

sed -n 267975,1000000p < dump-gq1-sample > dump267975

但如何打印到最后?我试过了

sed -n 267975,$p < dump-gq1-sample > dump267975

它给了我:

  

sed:1:“267975,”:预期的上下文地址

2 个答案:

答案 0 :(得分:4)

你是Shell Parameter Expansion

的受害者
sed -n 267975,$p < dump-gq1-sample > dump267975

sed收到

sed -n 267975, < dump-gq1-sample > dump267975

因为p变量未定义。

您应该使用单引号'

引用参数
sed -n '267975,$p' < dump-gq1-sample > dump267975

请参阅https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html有关现有shell扩展的完整列表。

答案 1 :(得分:2)

如果将范围的开始/结尾作为变量传递给sed,单引号响应将不起作用。

在我的系统上可以在单引号中在符号$和p之间包含一个空格,以防止$ p意外扩展

sed -n '267975,$ p' ${INPUT_FILE} > ${OUTPUT_FILE} #double quotes work here too

如果您需要将首行作为变量传递,则$ L1的扩展需要双引号,因此通常使用空格是个好主意:

L1=267975
sed -n "${L1},$ p" ${INPUT_FILE} > dump${L1}
相关问题