2017-07-25 181 views
1

我写了一个代码,它的伟大工程,但我需要使用变量,而不是静态的数字范围为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

谨防“无用的使用猫”,并通过使第一次保存过程命令:'sed'/ ^#/ d'

回答

1

单引号内的变量不会被shell扩展,因此您的sed命令字面上会看到参数$FT_LINE1,$FT_LINE2p。使用双引号,你将被罚款:

sed -n -e "$FT_LINE1,${FT_LINE2}p" 

参见:

+0

也许你也可以解释一件事。当我使用ft1 = 8和ft2 = 15时,它显示右移1的结果,如何修复它? –

1

括上花括号的变量,使外壳知道:

sed -n -e "${FT_LINE1},${FT_LINE2}p" 

编辑 - 哦,我不能相信我错过了单引号。他们需要双引号,因为其他人已经指出,所以会发生变量替换。

+0

仍然一样 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] * $ /! \' 错误信息:1:“$ {FT_LINE1},$ {FT_LINE2} p ”:无效的命令代码F –