linux 使用grep匹配字符串和一个或多个数字

vfwfrxfs  于 2023-01-08  发布在  Linux
关注(0)|答案(2)|浏览(411)

我有一个文件myfile。我想找到包含以下模式的行:

MyWebsite/1234

或更一般的

一些字符串空格我的网站/987一些字符串空格

MyWebsite后面可以有一个或多个数字。我尝试了以下方法:

grep ".*MyWebsite[0-9]\{1,\}" myfile
grep "MyWebsite[0-9]\{1,\}" myfile
grep MyWebsite"[0-9]\{1,\}" myfile
grep -E ".*MyWebsite/[0-9]\{1,\}.*" myfile

他们都没有工作,即使直觉和逻辑说,这应该是好的。

ewm0tg9j

ewm0tg9j1#

grep 'MyWebsite/[0-9]\+' myfile应该可以工作。在前3个正则表达式中,您错过了/,在最后一个中,您不应该转义{},但除此之外您做得很好。使用+{1,}更简洁,并且grep默认使用的正则表达式版本(POSIX BRE的变体)要求对它进行转义。

kmpatx3s

kmpatx3s2#

设置

grep(GNU grep)3.7

溶液

grep 'MyWebsite/[[:digit:]]\+' myfile

分解

  • 与数字0..9匹配的[[:digit:]]字符类
  • \转义字符
  • +匹配一个或多个字符(本例中为数字)

证明

# create myfile with content 'a bc/MyWebsite/1234/d ef'
echo 'a bc/MyWebsite/1234/d ef' > myfile

# test grep
grep 'MyWebsite/[[:digit:]]\+' myfile

# remove myfile
rm myfile

结果

a bc/我的网站/1234/d ef

突出显示的模式匹配

链接

相关问题