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

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

我想 grep 包含以下内容的行

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

我尝试过使用

grep -rhI " - * amount ".

但它会输出包含的任何内容

 - 

无论是否包含

amount

问题是我只想要字符串

 - * amount

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

但这不起作用。

答案1

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

这意味着- * amount将匹配

  • - amount
  • - amount
  • - amount
  • (ETC。)

要匹配您编写的数字,请使用- [0-9,]+ amountas 模式。将+强制至少匹配前面的正则表达式,并将[0-9,]匹配任何数字或逗号。

给定以下文件:

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

 - amount
 -     amount
 - some amount

这将起作用:

$ grep -E -e '- [0-9,]+ amount' file
 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

需要-E是因为+它是扩展的正则表达式运算符,并且-e需要 是因为否则-模式中的 会被解释为grep(-e意味着下一个是grep应用于其输入的正则表达式) 的选项。没有-E,用\{1,\}代替+

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

$ grep -E '^ - [0-9,]+ amount$' file

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

答案2

类似的东西可以完成这项工作(使用 awk 脚本,搜索第一个标记是破折号,第三个标记是字符串“amount”):

awk '$1=="-" && $3=="amount" {print $2}'

如果您想打印整行,请使用以下命令:

awk '$1=="-" && $3=="amount" {print}'

答案3

你也可以使用

grep -rhI -- '- [^ ]* amount' /path/to/parent/dir/*

其中[^ ]*表示匹配除空格之外的任意数量的任何字符。

相关内容