如何僅從 Shell 腳本中的變量返回整數並丟棄字母和前導零?

湯姆·艾爾

在我的 shell 腳本中,有一個來自某些系統的參數,它給出了與此類似的答案:PAR0000008。而且我只需要將此參數的最後一個數字發送到另一個變量,即 VAR=8。我使用了這個命令VAR=$( echo ${PAR} | cut -c 10 ),它工作得很好。問題是當 PAR 參數返回兩個小數位的數字時,如 PAR0000012。我需要丟棄前導零並僅將數字 12 發送到變量,但我不知道如何在 Shell 中執行邏輯以丟棄數字左側的所有字符。

大衛·C·蘭金

編輯使用grep將 0 作為最終數字的一部分處理

由於您使用的是 POSIX shell,因此使用像sedor grep(or cut)這樣的實用程序是有意義的。grep在解析字符串時更加靈活,允許 REGEX 匹配來處理工作。說你的變量v=PAR0312012,你想要結果r=312012您可以使用命令替換(例如$(...))來解析將結果分配給的值r,例如

v=PAR0312012
r=$(echo $v | grep -Eo '[1-9].*$')
echo $r

grep表達式為:

  • -Eo - 使用擴展正則表達式並只返回字符串的匹配部分,
  • [1-9].*$- 從第一個字符開始[1-9]返回字符串的其餘部分。

這將適用於PAR0000012PAR0312012(結果312012)。

結果

為了 PAR0312012

312012

另一種解決方案使用 expr

如果您的變量可以將零作為最終數字部分的一部分,那麼您必須找到第一個[1-9]字符出現的索引,然後將從該索引開始的子字符串分配給您的結果變量。

POSIX shell 提供expr了一組可以對此進行解析的字符串解析工具。需要的命令是:

expr index string charlist

expr substr string start end

哪里startend是從字符串中提取的開始和結束索引。end只需足夠長以包含整個子字符串,因此您可以只使用字符串的總長度,例如

v=PAR0312012
ndx=$(expr index "$v" "123456789")
r=$(expr substr "$v" "$ndx" 10)
echo $r

結果

312012

這將0在第一個[1-9].

注意:expr ...的不是處理這個問題的最快方法,但如果你只關心幾萬個值,它會工作得很好。可能需要十億個數字和另一種方法)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Shell腳本從TXT讀取行並分配給env變量?

如何迭代多個變量並使用 Shell 腳本回顯它們?

如果從字符串中選取某個單詞,如何僅使一段代碼工作

如何從包含字典列表的表中查詢,僅適用於某些鍵 (BigQuery) SQL

我如何僅從這個類 ID 中獲取文本,其中 Span 位於中間?

如何使用 Chef 配方通過讀取 Shell 腳本來設置環境變量?

如何在 C# 中僅從 Oracle raise_application_error 中提取錯誤消息

如何從嵌套數組中僅獲取布爾值

如何使用linq實體僅從sql表中選擇最後一個條目

如何在shell腳本中組合exec命令

如何使用 Python 從 Shopify API 中僅提取“昨天的”訂單。需要是動態的,而不是靜態的

如何僅從字典中獲取鍵的一部分的值?

如何在 Shell 腳本中傳遞命名參數

${@:3} shell 腳本後如何接受參數

C - 如何僅從周數和年份獲取一周內的日期?

如何從使用 bash 腳本運行的 C 程序中獲取變量的值?

如何從腳本在 xpath 中傳遞變量?

如何使頁腳僅從第二頁開始出現

如何從python的一列中的日期列表中僅獲取一個最大日期

如何在spark中將雙大括號從shell腳本傳遞到python腳本?

如何從網址中僅提取域名?

如何使用Powershell從csv文件中僅讀取一列

如何從 numpy 數組中刪除僅噪聲的行?

僅從年份中提取數據

如何使用 Power Shell 腳本從目錄中排除文件夾

如何在 shell 腳本中運行 sacct 命令

如何使用javascript從多個div中僅在剪貼板中復制一個DIV

如何僅從 Firebase 實時數據庫獲取密鑰

如何從 R 中的 2 個單獨數據幀的列中返回僅匹配值的數據幀?