簡體   English   中英

如何使用 bash 腳本從文件中的字符串中獲取可變位數的數字?

[英]How to get a number with variable number of digits from a string in a file using bash script?

我有以下文件:

APP_VERSION.ts

export const APP_VERSION = 1;

這是該文件的唯一內容, APP_VERSION變量將根據需要遞增。

因此, APP_VERSION可以是一位數字或多位數字,例如15999等。

我需要在我的 bash 腳本之一中使用該值。

使用-app-version.sh

APP_VERSION=`cat src/constants/APP_VERSION.ts`
echo $APP_VERSION

我知道我可以用cat閱讀它。 但是,我該如何解析該string ,以便准確獲取APP_VERSION值,例如,它是1還是999

sed -En 's/(^.*APP_VERSION.*)([[:digit:]]+.*)(\;.*$)/\2/p' src/constants/APP_VERSION

使用 sed,將該行拆分為由左括號和右括號定義的三個部分。 將第二部分的行替換為(版本值)並打印。

您可以使用這個 awk:

app_ver=$(awk -F '[[:blank:];=]+' '$(NF-2) == "APP_VERSION" {print $(NF-1)}' src/constants/APP_VERSION.ts)

echo "$app_ver"
1

您可以連接一些命令以刪除其他所有內容:

APP_VERSION=`cat src/constants/APP_VERSION.ts | awk -F '=' '{print $2}' | tr -d ' ' | tr -d ';'`

1 - Cat 獲取所有文件內容

2 - AWK 獲取'='之后的所有內容

3 - 刪除空間

4 - 移除;

一個簡單的

APP_VERSION=$(grep --text -Eo '[0-9]+' src/constants/APP_VERSION.ts)

應該夠了

僅限 bash:

APP_VERSION=$(cat src/constants/APP_VERSION.ts)
APP_VERSION=${APP_VERSION%;}
APP_VERSION=${APP_VERSION/*= }

第 2 行刪除尾隨的 ';',第 3 行刪除“=”之前的所有內容。 或者,您可以將 APP_VERSION 設置為數組,取第 5 個元素,並刪除尾隨的“;”。

或者,另一種解決方案,使用 IFS:

IFS='=;' read a APP_VERSION < src/constants/APP_VERSION.ts

在這個版本中,空格將保留在版本號之前。

假設任務可以改寫為“從文件中提取數字”,有幾個選項:

  • 使用tr刪除所有不是數字的字符:

     version=$(tr -cd '[:digit:]' < infile)
  • 使用 grep 匹配所有數字,只保留匹配項:

     version=$(grep -Eo '[[:digit:]]+' infile)
  • 將文件讀入字符串並僅使用 Bash 刪除所有非數字:

     contents=$(< infile) version=${contents//[:[:digit:]]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM