Bash + debian。爲什麼 d +或 d +在這裏不等於 d *?
匹配信息結尾處的端口號。
s="2017-04-17 08:16:14 INFO connecting lh3.googleusercontent.com:443 from 111.111.111.111:26215"
echo $s | sed 's/\(.*\):\(\d*\)/\2/'
26215
讓我們將它與sed中的\ d +或\ d +進行匹配。
echo $s | sed 's/\(.*\):\(\d\+\)/\2/'
echo $s | sed 's/\(.*\):\(\d+\)/\2/'
所有這些都獲得整個字符串作爲輸出。
2017-04-17 08:16:14 INFO connecting lh3.googleusercontent.com:443 from 111.111.111.111:26215
它們都不能匹配端口號,爲什麼?
sed沒有'\ d'字符類......第一個是因爲'\ d'與'd'相同而'd *'可以是空的......'\ 2'是空的。 ..'sed's/\(。* \):\(\ d * \)/ \ 2 /''就是直接刪除最後一行':'在這行......你可以用任何字母替換'd'。 ..'sd \ /(。* \):\(\ q * \)/ \ 2 /' – Sundeep
Sundeep說 - '\ d'在'sed'中不起作用。改用'[[:digit:]]'。 –
當我用'sed'開始時,我有[類似問題](https://unix.stackexchange.com/questions/279368/sed-regular-expression-behaving-differently-than-in-vim-and-perl).. 。隨着時間的推移,人們傾向於學習有太多正則表達式風格的教訓...... – Sundeep