一个文件中的“完美”egrep,只有大量垃圾和一大行

一个文件中的“完美”egrep,只有大量垃圾和一大行

我有一个包含大量垃圾的文件(奇怪的字符、注释等),该文件包含一些我想用 grep 提取的链接。文件很大,一行2000多字。如果我尝试这条线完美匹配

egrep -Eo --text "abcde192848.bmp" Untitled\ 1.txt

正确返回abcde192848.bmp。但是有很多bmp链接,如果我尝试却无法获取它

egrep -Eo --text "^abc*+.bmp" Untitled\ 1.txt

什么都不返回。我的问题是:如何从一行 grep 所有以 abc 开头、以 bmp 结尾的字符串?该文件与此类似

***strangechars***urlabc1239.bmp****sstrangechars***urlabc394848.bmp***

该行非常大并且包含很多 .bmp“url”。我想要的输出必须返回

abc449048.bmp
abc231848.bmp
abc144848.bmp

答案1

尝试

grep -o 'abc[a-z0-9]*\.bmp'
  • [a-z0-9]*这将匹配零个或多个小写字母和数字
  • \.这将按.字面意思匹配一个字符


为什么^abc*+.bmp不起作用

  • ^是行锚点的开始,因此您最多只能在每行获得一个匹配项,而不是该行中的所有匹配项
  • c*将匹配c零次或多次,也许您打算*像 shell glob 一样工作?
  • +不确定这结合起来会做什么*+
  • .将匹配任何字符,而不仅仅是.字符

相关内容