我试图在linux/bash中的特定文件中搜索子字符串"abc"
所以我这样做:
grep '*abc*' myFile
Run Code Online (Sandbox Code Playgroud)
它什么都不返回.
但如果我这样做:
grep 'abc' myFile
Run Code Online (Sandbox Code Playgroud)
它正确返回匹配.
现在,这对我来说不是问题.但是,如果我想要更复杂的字符串,那该怎么办?
*abc * def *
Run Code Online (Sandbox Code Playgroud)
我将如何使用grep完成它?
Dan*_*uis 108
星号只是一个重复操作符,但您需要告诉它重复的内容./*abc*/匹配一个包含ab和零个或多个c的字符串(因为第二个*在c上;第一个没有意义,因为它没有重复的内容).如果你想匹配任何东西,你需要说.*- 点意味着任何角色(在某些指导方针内).如果你想只匹配abc,你可以说grep 'abc' myFile.对于更复杂的匹配,您需要使用.*- grep 'abc.*def' myFile将匹配包含abc的字符串,后跟def,其中包含可选的内容.
根据评论更新:
*正则表达式与控制台中的*不完全相同.在控制台中,*是glob构造的一部分,只是充当通配符(例如,ls *.log将列出以.log结尾的所有文件).但是,在正则表达式中,*是一个修饰符,这意味着它只适用于它前面的字符或组.如果你希望正则表达式中的*充当通配符,你需要.*像前面提到的那样使用- 点是通配符,修改点时星号意味着找到一个或多个点; 即.找到一个或多个角色.
小智 13
只有在它前面有某些东西时,"星座"才有意义.如果没有工具(在这种情况下为grep)可能只是将其视为错误.例如:
'*xyz' is meaningless
'a*xyz' means zero or more occurrences of 'a' followed by xyz
Run Code Online (Sandbox Code Playgroud)
Art*_*kii 10
使用 grep -P - 它支持 Perl 风格的正则表达式。
grep -P "abc.*def" myfile
Run Code Online (Sandbox Code Playgroud)
这对我有用:
grep ".*${expr}" - 带双引号,前面加点。其中 ${expr} 是行末尾所需的任何字符串。
所以在你的情况下:
grep ".*abc.*" myFile
Run Code Online (Sandbox Code Playgroud)
标准 Unix grep。
| 归档时间: |
|
| 查看次数: |
124118 次 |
| 最近记录: |