awk中不能解析shell變數,建議做法是通過-v傳遞進去:
1typeline=`
cat
$typepath |
awk
-
v
str=
"$typetmp"
'/str/'
`
第一句之所以在awk中可以直接使用shell變數$line,是因為用的雙引號。
從執行效率上來說,你的寫法其實太過累贅,下面是改良版:12
typetmp=`
awk
-f
":"
-
v
n=$line
'nr==n'
$paratmppath`
typeline=`
sed
-n
'/'
"$typetmp"
'/='
$typepath`
這裡用sed來獲取行號。
第一句,cut能做的awk也能做,直接在乙個awk裡完成就行。
awk和sed本身就是直接對檔案的處理,用不著先cat再通過管道傳遞過來處理。
"$typetmp"前面的單引號用於跟一開始的單引號湊成一對,關閉sed作用域回到shell環境中,使得shell可以解析此變數,然後重新用單引號再次進入sed作用域。等於將sed作用域從中間分割開了。
Shell指令碼的幾種字串子串獲取
假設有變數 var 1.號擷取,刪除左邊字元,保留右邊字元。echo 其中 var 是變數名,號是運算子,表示從左邊開始刪除第乙個 號及左邊的所有字元 即刪除 http 結果是 www.aaa.com 123.htm 2.號擷取,刪除左邊字元,保留右邊字元。echo 表示從左邊開始刪除最後 最右邊 ...
Shell指令碼之 字串
字串可以用單引號,也可以用雙引號,也可以不用引號。單引號 str this is a string 單引號字串的限制 1.單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的 2.單引號字串中不能出現單引號 對單引號使用轉義符後也不行 雙引號 name runnyu str hello,n 雙...
shell指令碼 字串
printf printf 10s 10s 10s n no name height printf 10s 10s 10d n 1 whr 187 2 wsl 198 字串切片 冒號後面一定要加空格 基於模式取子字串 從左至右 刪除pattern第一次匹配到的 刪除pattern最後一次匹配到的 從...