2017-07-25 119 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 –