带有随机数字字符的 Grep 字符串

Tho*_*hop 6 grep

我想 grep 包含的行

 - 0 amount
 - 122,000,000 amount
 - 50,000 amount
Run Code Online (Sandbox Code Playgroud)

我试过用

grep -rhI " - * amount ".
Run Code Online (Sandbox Code Playgroud)

但它会输出任何包含

 - 
Run Code Online (Sandbox Code Playgroud)

不管它是否包含

amount
Run Code Online (Sandbox Code Playgroud)

问题是我只想要字符串

 - * amount
Run Code Online (Sandbox Code Playgroud)

where*表示介于 之间的任何内容- (here) amount。如果仅包含“-”的行被忽略,则是可以接受的。

但它不起作用。

Kus*_*nda 10

*将匹配的零个或更多个的前面的字符或图案。

这意味着- * amount将匹配

  • - amount
  • - amount
  • - amount
  • (等等。)

要匹配数字,如您所写,请使用- [0-9,]+ amountas 模式。在+将迫使前述正则表达式中的至少一个匹配,并且[0-9,]将匹配的任何数字或逗号。

鉴于以下文件:

 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

 - amount
 -     amount
 - some amount
Run Code Online (Sandbox Code Playgroud)

这将起作用:

$ grep -E -e '- [0-9,]+ amount' file
 - 0 amount
 - 122,000,000 amount
 - 50,000 amount
Run Code Online (Sandbox Code Playgroud)

-E需要,因为+是一个扩展的正则表达式运算符,并且-e是需要的,因为否则-在图案将被解释为一个选项grep-e装置接下来的事情是一个正则表达式grep应用到它的输入)。没有-E,使用\{1,\}代替+

您还可以将模式锚定到行的开头和结尾:

$ grep -E '^ - [0-9,]+ amount$' file
Run Code Online (Sandbox Code Playgroud)

这意味着-e不再需要 ,并且将确保该行以空格开头,后跟破折号和数字等。该字符串amount必须是该行的最后一个内容(我们用 将单词锚定到该行的末尾$)。