我写了一段代码并且效果很好,但我需要使用变量代替静态数字作为范围8和16
cat /etc/passwd | sed '/^#/d' | sed -n 'n;p' | sed 's/:\(.*\) //g' | sed 's/ /,/g' | sed 's/\(.*\),/\1./' | sort -r | sed 's/*rav://g' | sed "s/:.*//" | rev | sed -n -e '8,16p' | xargs | sed -e 's/ /, /g' | sed '/:[0-9]*$/ ! s/$/./'
我已将代码更改为
cat /etc/passwd | sed '/^#/d' | sed -n 'n;p' | sed 's/:\(.*\) //g' | sed 's/ /,/g' | sed 's/\(.*\),/\1./' | sort -r | sed 's/*rav://g' | sed "s/:.*//" | rev | sed -n -e '$FT_LINE1,$FT_LINE2+p' | xargs | sed -e 's/ /, /g' | sed '/:[0-9]*$/ ! s/$/./'
但我收到了错误
sed: 1: "$FT_LINE1,$FT_LINE2p": invalid command code F
答案 0 :(得分:1)
使用大括号包围变量,以便shell知道变量名称的结束位置:
sed -n -e "${FT_LINE1},${FT_LINE2}p"
编辑 - D'哦,我不敢相信我错过了单引号。它们需要是双引号,正如其他人指出的那样,会发生变量替换。
答案 1 :(得分:1)
单引号中包含的变量不会被shell扩展,因此sed
命令会逐字地看到参数$FT_LINE1,$FT_LINE2p
。使用双引号,你会没事的:
sed -n -e "$FT_LINE1,${FT_LINE2}p"
另见: