我在 Bash Shell 上使用 Unix,並希望驗證它是否具有以下形式:
[0-9*][,[0-9*]*]
因此,以下字串都是有效的:
- 141,325,562
- 65
- 659,948,8465,9853,2659,156,884,351,0,451,01,10
我的 Unix 相當基礎,因此我們將不勝感激。
答案1
bash
要符合,zsh
或中 shell 變數的內容ksh93
:
re='^[0-9]+(,[0-9]+)*$'
[[ $string =~ $re ]] && echo matches
POSIXly:
case $string in
("" | *[!,0-9]* | ,* | *, | *,,*) ;;
(*) echo matches;;
esac
伯恩利:
expr " $string" : ' [0-9]\{1,\}\(,[0-9]\{1,\}\)*$' > /dev/null &&
echo matches
要匹配輸入行:
grep -xE '[0-9]+(,[0-9]+)*'
我們使用+
(或 BRE 等效項\{1,\}
)來匹配1或更多數字。*
會匹配0或更多。