![当作为变量传递时,sed 将无法识别数字](https://linux22.com/image/96302/%E5%BD%93%E4%BD%9C%E4%B8%BA%E5%8F%98%E9%87%8F%E4%BC%A0%E9%80%92%E6%97%B6%EF%BC%8Csed%20%E5%B0%86%E6%97%A0%E6%B3%95%E8%AF%86%E5%88%AB%E6%95%B0%E5%AD%97.png)
这个表达式:
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))"