shell指令碼,根據字串獲取行號的

2022-03-30 00:08:54 字數 838 閱讀 1403

awk中不能解析shell變數,建議做法是通過-v傳遞進去:

1typeline=`cat$typepath |awk-vstr="$typetmp"'/str/'`

第一句之所以在awk中可以直接使用shell變數$line,是因為用的雙引號。

從執行效率上來說,你的寫法其實太過累贅,下面是改良版:12

typetmp=`awk-f":"-vn=$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最後一次匹配到的 從...