当作为变量传递时,sed 将无法识别数字

当作为变量传递时,sed 将无法识别数字

这个表达式:

FN=27
LN=145
cat $FILENAME | sed -n $FN,$LNp

因以下错误而失败:“sed:-e表达式#1,字符3:意外的`,'”但是当我使用实际数字时,我得到了预期的结果。没有嵌入特殊字符,也没有尾随或前导空格

cat $FILENAME | sed -n 27,145p

这里发生了什么?

答案1

除非$LNp设置了变量,否则sed命令将为(假设默认值为 IFS,因为您忘记引用变量):

sed -n 27,

在这里,您想要:

sed -n "$FN,${LN}p" < "$FILENAME"

告诉 shellp不是变量名的一部分(sed -n "$FN,$LN"p也可以)。

或者更有效地在找到第thsed行后立即停止:$LN

sed "$FN,\$!d;${LN}q" < "$FILENAME"

或者

tail -n "+$FN" < "$FILENAME" | head -n "$((LN - FN + 1))"

相关内容