[問題] 如何讓Bash取出特定序數?

看板Linux作者 (Kuan)時間12年前 (2011/08/19 14:13), 編輯推噓0(009)
留言9則, 6人參與, 最新討論串1/1
ls後有一堆長這樣子的檔案: foo_001_bar foo_002_bar foo_004_bar foo_005_bar foo_007_bar ... (注意序數不一定連續) 我想要像是指定[0-9]{3}的方法單獨取出「數字」,而不包括檔名中其他的東西;然後輸 出到$FILE_SERIAL陣列中: 001 002 004 005 007 ... 原本想試試看用sed或awk做(我不知道方向有沒有錯誤...我是Shell Script初學者...), 但Google看了很久還是不知道該如何只取出數字。 謝謝。 --

04/08 21:32,
我承認她們全都是我的後宮(  ̄ c ̄)y▇▇▇▇▇▇▇~※
04/08 21:32

04/08 21:34,
◤ 大砲 █●
04/08 21:34

04/08 21:35,
▇▇▇▇▇▇▇▇▇▇
04/08 21:35

04/08 21:35,
04/08 21:35

04/08 21:35,
*******************
04/08 21:35

04/08 21:38,
樓上那啥鬼
04/08 21:38
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.221.57

08/19 14:24, , 1F
foo_ 跟 _bar 是固定的嗎?
08/19 14:24, 1F

08/19 14:26, , 2F
不一定
08/19 14:26, 2F

08/19 14:27, , 3F
不過大多數時候是固定的。
08/19 14:27, 3F

08/19 14:28, , 4F
所以我還是希望取出特定兩位數/三位數
08/19 14:28, 4F

08/19 14:33, , 5F
cut -d "_" -f 2 可以取出兩個底線間夾的字串
08/19 14:33, 5F

08/19 15:30, , 6F
我用foo_bar只是範例,實際名稱有一堆底線...
08/19 15:30, 6F

08/19 16:23, , 7F
這可能要用到正規表示式才行了
08/19 16:23, 7F
我是往那個方向想沒錯,但不知要如何單獨抽出一堆檔名中的01 02這種序數而不是一整行 。

08/19 17:33, , 8F
最好是給個實際例子才容易給建議...
08/19 17:33, 8F
沒啥太大不同,只是底線比較多,但每個檔名中只有唯一的二位數字。長得可能像: output_AUG_03_b 或是 output.a.[03] 之類,不過當這種情形發生時我會自己再改一下Script在用,所以沒關係(自用而已),只 要知道如何抽這種數字就好。謝謝。

08/19 18:05, , 9F
tr -d '[:punct:][:alpha:]' ?
08/19 18:05, 9F
目前這個好像夠了,謝謝。不過以後如果檔名裡還有其他數字的話我還是希望可以用RegEx 感謝qsort的解答: grep -o "[0-9]\+" ※ 編輯: kuan 來自: 118.166.213.238 (08/23 01:21)
文章代碼(AID): #1EJVyOz1 (Linux)