我有一個包含數字資料的檔案,從另一個檔案中讀取變數可以提取正確的字串。
我有我的代碼要讀入變數。
問題是變數可以出現在字串中的不同點,我只想要右側有變數的字串,即最后 8 個字符。
例如
grep 0335439 foobar.txt
00032394850033543984
00043245845003354390
00060224460033543907
00047444423700335439
在這種情況下,它是最后一行。
我試圖用 寫一些東西${str: -8},但后來我丟失了前面的資料。
我找到了這個命令
grep -Eo '^.{12}(0335439)' foobar.txt
這有效,但是當我使用我的腳本并將變數放在它沒有的地方時,grep -Eo '^.{12}($string)' foobar.txt.
我試過沒有括號,但它仍然不起作用。
更新:
在這種情況下,字串的長度始終為 20 個字符,因此在我的情況下,從 LHS 計數是可以的,但您是對的,這不是原始問題的答案。我試圖對代碼進行評論,所以這樣說,但將其粘貼到評論框中洗掉了格式。
uj5u.com熱心網友回復:
我只想要右側有變數的字串,即最后 8 個字符
使用非正則運算式的方法awk更適合這項作業:
s='00335439'
awk -v n=8 -v kw="$s" 'substr($0, length()-n, n) == kw' file
00043245845003354390
在這里,我們傳遞n=8給 awk 并使用substr($0, length()-n, n)我們獲取n一行中的最后一個字符,然后將其與kw在命令列上設定為值的變數進行比較。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/356227.html
