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

C0p*_*t0p 0 sed variable

这个表达:

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)

这里发生了什么?

Sté*_*las 5

除非$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)