2016-09-30 33 views
1

我需要打印16972 1684 173,但+不起作用,沒有+它只刪除一位數字。查找在bash中替換數字

#!/bin/bash 
numbers="16972,4 1684,15556 173,2" 
echo $numbers 
echo ${numbers//,[[:digit:]]+/} 

回答

2

如果啓用extglob外殼選項可以匹配模式的一次或多次出現:

$ shopt -s extglob 
$ echo "${numbers//,+([0-9])/}" 
16972 1684 173 

Pattern Matching在Bash的手冊。

+0

很好的答案。 @krish,請注意,bash參數擴展技巧不使用正則表達式,它們使用shell模式。閱讀eugene答案中的鏈接。 –

4

假設我們可以依靠的numbers的格式是數字的逗號分隔的對一個空格分隔的序列,可以將字符串簡單地分成數組,然後應用後綴移除到每個元素。

$ numbers="16972,4 1684,15556 173,2" 
$ read -a arr <<< "$numbers" 
$ echo "${arr[@]%,*}" 
16972 1684 173 
+0

爲什麼不'ARR =($號)'? – safsaf32

+2

在這種情況下,你可以,但通常我會擔心'$ numbers'包含可能觸發路徑名擴展的'*'字符。 – chepner

1

可以使用sed代替

$ sed -r 's/,[0-9]+//g' <<< $numbers 
16972 1684 173