这个表达:
FN=27
LN=145
cat $FILENAME | sed -n $FN,$LNp
Run Code Online (Sandbox Code Playgroud)
因以下错误而失败:“sed:-e 表达式 #1,字符 3:意外的‘,’”但是当我使用实际数字时,我得到了预期的结果。没有嵌入特殊字符,也没有尾随或前导空格
cat $FILENAME | sed -n 27,145p
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
除非$LNp
设置了变量,否则sed
命令将是(假设 IFS 的默认值,因为您忘记引用变量):
sed -n 27,
Run Code Online (Sandbox Code Playgroud)
在这里,你想要:
sed -n "$FN,${LN}p" < "$FILENAME"
Run Code Online (Sandbox Code Playgroud)
告诉 shellp
不是变量名的一部分(sed -n "$FN,$LN"p
也可以)。
或者更有效地告诉sed
在找到$LN
第 th行后立即停止:
sed "$FN,\$!d;${LN}q" < "$FILENAME"
Run Code Online (Sandbox Code Playgroud)
或者
tail -n "+$FN" < "$FILENAME" | head -n "$((LN - FN + 1))"
Run Code Online (Sandbox Code Playgroud)