我想 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必须是该行的最后一个内容(我们用 将单词锚定到该行的末尾$)。