我有困难理解我的bash shell中的正则表达式到底在做什么。
我有一个字符串
然而,在给定的字符串上使用
另外,使用
我是否错误地认为表达式
此外,
总之,我想了解我的错误在哪里,以及如何在正则表达式中解决这个问题,而不使用[\s]来隔离第一个数字字符串。
我有一个字符串
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 67890testing
替换为12345
。相反,你想要用空白替换初始匹配项。不幸的是,据我所知,在sed
表达式的开头放置一个非贪婪的.*?
的方法是不存在的,内联 Perl 或 Ruby 可能是更好的选择。 - chrylis -cautiouslyoptimistic-