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