如何扩展grep命令的搜索范围以匹配更多目标内容?
没问题,我来帮你搞定这两个grep的问题,全程只用grep工具,完全符合你的要求~
问题1:匹配10及以上的所有内容
你现在能匹配101-191,推测你之前的grep正则可能是限定了1开头、第三位是1的三位数(比如grep '1[0-9]1')。要扩展到匹配所有≥10的数字内容,我们可以用grep的扩展正则来实现:
grep -E '[1-9][0-9]+' 你的文件名
正则解释:
-E:启用扩展正则表达式(这样我们可以用+表示“至少出现一次”)[1-9]:匹配第一位非0的数字(避免匹配00、01这类无效的小于10的数字)[0-9]+:匹配后面至少一位数字,组合起来就能覆盖10、100、1234这类所有≥10的数字,完美包含你需要的101-191以及203及以上的内容。
如果你的内容里数字和其他字符混在一起(比如abc123def),这个正则也能精准匹配到其中的123这类≥10的数字。
问题2:扩展首字母为L的名称匹配范围
你现在只能匹配第一组首字母为L的名称,大概率是你的正则限定了匹配位置(比如只匹配行首的L开头名称,用了^L)。要匹配其他位置(比如230后面的L开头名称),我们需要调整正则,去掉位置限制或者扩展可匹配的前缀:
情况1:名称用分隔符(逗号、空格等)和其他内容分开
假设你的内容格式类似230,London或者230 London,可以用下面的命令:
grep -E '(^|分隔符)L' 你的文件名
把分隔符换成你实际的分隔符(比如逗号写,,空格写 )。比如内容是230,Los Angeles,就用:
grep -E '(^|,)L' 你的文件名
情况2:直接匹配所有以L开头的单词(不管位置)
如果你的名称是独立单词(前后是非字母数字字符),可以用单词边界来匹配:
grep '\bL' 你的文件名
解释:
(^|分隔符):表示要么是行首(^),要么是指定分隔符,这样就能匹配到所有在这些位置之后的L开头名称\b:表示单词边界,匹配L作为单词的第一个字符,不管这个单词在一行的哪个位置(比如数字后面、句子中间的L开头单词都能匹配到)
这样调整后,230中的L开头名称就能被匹配到了。
内容的提问来源于stack exchange,提问作者user9689146
相关产品推荐
相关产品推荐

