我写了这段代码:
cat /etc/passwd | cut -d : -f1 | sed -n "${FT_LINE1}, ${FT_LINE2} p"
输出:
sed: -e expression #1, char 1: unknown command: `,'
但我有变量$FT_LINE1, $FT_LINE2
的问题。
当我使用常量而不是变量时,此代码可以正常工作
cat /etc/passwd | cut -d : -f1 | sed -n "3, 5 p"
我试着使用这些结构:
sed -n -e "${FT_LINE1}, ${FT_LINE2} p"
sed -n "{$FT_LINE1}, {$FT_LINE2} p"
sed -n "${FT_LINE1},${FT_LINE2} p"
sed -n "${FT_LINE1}, ${FT_LINE2}" p
sed -n "$FT_LINE1, $FT_LINE2" p
但错误仍然存在。
如melpomene和PesaThe's comments所述,sed
地址范围不能为空,壳变量${FT_LINE1}
和${FT_LINE2}
必须设置为某个适当的值。
这种重现错误的最简单方法是:
sed ,
哪个输出:
sed: -e expression #1, char 1: unknown command: `,'
因为,
不是sed
命令,所以它只是一个分隔范围地址的分隔符。
查看其他一些相关错误可能会有所帮助。让我们添加1的起始地址:
sed 1,
输出:
sed: -e expression #1, char 2: unexpected `,'
这似乎没有用,因为它应该在,
之后期待一个地址。现在让我们添加第二个地址1:
sed 1,1
输出:
sed: -e expression #1, char 3: missing command
好一点,但实际上它是缺少命令的char 4,或者更确切地说是在char 3之后缺少命令。
现在让我们添加一个命令和一些输入,它可以工作:
echo foo | sed 1,1p
输出:
foo