我有許多遵循以下格式的字串:
" 3:[numbers and text]"
關鍵特征是字串以許多空格開頭,所需部分用括號括起來,括號會在一秒內重復。我想提取與“數字和文本”相對應的字串的數字和文本部分,在每次出現字串時都會發生變化。此外,字串被保存為一個變數,稱為 var。我想到了兩種方法來做到這一點,但都沒有奏效。
方法 1:對于字串的每次出現,我想要的部分從索引 24 開始并在倒數第二個字符處結束,所以我嘗試提取這部分是:
var_truncated=${var:24:-1}
方法 2:洗掉括號前后的所有內容,不確定如何執行此操作
uj5u.com熱心網友回復:
方法二
$ var_truncated=${var/*[}
$ var_truncated=${var_truncated/]*}
$ echo "$var_truncated"
numbers and text
uj5u.com熱心網友回復:
也許您可以使用 Bash 中的內置模式匹配支持:
測驗檔案
# https://github.com/micromatch/posix-character-classes#posix-character-classes
declare -r pat='^[[:space:]]*([[:digit:]] ):\[([^]] )\]$'
declare -r str=' 3:[numbers and text]'
if [[ $str =~ $pat ]]; then
declare -p BASH_REMATCH
echo "number: '${BASH_REMATCH[1]}'"
echo "string: '${BASH_REMATCH[2]}'"
fi
$ ./test.sh
declare -a BASH_REMATCH=([0]=" 3:[numbers and text]" [1]="3" [2]="numbers and text")
number: '3'
string: 'numbers and text'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/390152.html
