我想 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,]+ amount
as 模式。在+
将迫使前述正则表达式中的至少一个匹配,并且[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
必须是该行的最后一个内容(我们用 将单词锚定到该行的末尾$
)。
归档时间: |
|
查看次数: |
4717 次 |
最近记录: |