我有問題了解我的正則表達式在bash shell中的確正在做什麼。正則表達式匹配只有數字
我有字符串abcde 12345 67890testing
。我想使用sed
從這個字符串中提取12345
。
但是,使用sed -re 's/([0-9]+).*/\1/'
對給定的字符串將給我abcde 12345
。另外,使用sed -re 's/([\d]+).*/\1/'
實際上只提取abcd
。
我錯了,假設表達式[0-9]
和[\d]
只捕獲數字?我不知道如何abcd
被捕獲,但字符串67890
不是。另外,我想知道爲什麼在我的第一個查詢中捕獲空間?另外,sed -re 's/^.*([0-9]+).*/\1/'
給我0
。在這種情況下,我完全不明白正則表達式在做什麼。我以爲表達式^.*[0-9]+
只會捕獲一串唯一數字的第一個實例?不過,它只匹配最後一個0.總之,我想了解我對所有這些問題的看法。以及如何在正則表達式中使用[\ s]來解決問題,以隔離第一個數字串。
問題是你的'sed'命令是這樣的:「在每一行上,找到一些數字後跟任意數量的字符,一個用數字替換那個匹配。「它正在執行指定的內容,即用'12345'替換12345 67890testing'。相反,你想用什麼都替換最初的匹配。不幸的是,據我所知,沒有辦法在'sed'表達式的前面放置一個非貪婪的'。*?',而內聯Perl或Ruby可能是更好的選擇。 – chrylis