我有问题了解我的正则表达式在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