亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Bash中提取子字符串

在Bash中提取子字符串

白衣非少年 2019-07-09 16:32:34
在Bash中提取子字符串在表單中給出文件名someletters_12345_moreleters.ext,我想提取這5位數,并將它們放入一個變量中。因此,為了強調這一點,我有一個文件名,其中有x個字符,然后是一個5位序列,兩邊都有一個下劃線,然后是另一組x個字符。我想取5位數,然后把它放進一個變量中。我非常感興趣的是,有多少種不同的方法可以做到這一點。
查看完整描述

3 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

使用:

echo 'someletters_12345_moreleters.ext' | cut -d'_' -f 2

更一般的:

INPUT='someletters_12345_moreleters.ext'SUBSTRING=$(echo $INPUT| cut -d'_' -f 2)echo $SUBSTRING


查看完整回答
反對 回復 2019-07-09
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

如果x為常數,下面的參數展開執行子字符串提取:

b=${a:12:5}

哪里12是偏移量(基于零)和5是長度

如果數字周圍的下劃線是輸入中的唯一下劃線,則可以分兩個步驟去掉前綴和后綴:

tmp=${a#*_}   # remove prefix ending in "_"b=${tmp%_*}   # remove suffix starting with "_"

如果有其他的下劃線,它可能是可行的無論如何,雖然更棘手。如果有人知道如何在單個表達式中執行這兩種擴展,我也想知道。

這兩種解決方案都是純bash,不涉及進程生成,因此非常快。


查看完整回答
反對 回復 2019-07-09
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

通用解決方案,其中的數字可以在文件名中的任何位置,使用第一個這樣的序列:

number=$(echo $filename | egrep -o '[[:digit:]]{5}' | head -n1)

另一種完全提取變量一部分的解決方案:

number=${filename:offset:length}

如果您的文件名始終具有以下格式stuff_digits_...您可以使用awk:

number=$(echo $filename | awk -F _ '{ print $2 }')

刪除數字以外的所有內容的另一種解決方案,請使用

number=$(echo $filename | tr -cd '[[:digit:]]')


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 472 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號