Aak*_*edi 4 command-line regex grep text-processing wildcards
我搜索了ki
与*
按下面的例子,它应该已经回到了前三行。我不确定为什么它在没有ki
匹配的情况下返回最后一行。
$ grep "ki*" trial_file.txt
kartik,27,Bangalore,Karnataka
pulkit,25,Bangalore,Karnataka
kit,28,Bangalore,Karnataka
kush,24,Pennsylvania,Philadelphia
Run Code Online (Sandbox Code Playgroud)
Eli*_*gan 11
不要*
用于此。使用grep 'ki' trial_file.txt
或grep -F 'ki' trial_file.txt
。
除非您将-x
/--line-regex
选项传递给它,否则grep
将返回包含任何地方匹配项的行,即使整行都不是匹配项。所以你所要做的就是匹配该行的一部分。您不必做任何特殊的事情来表明可能有更多字符。
在正则表达式中,*
表示“前一项的零个或多个”。这是从它的意义完全不同的壳路径扩展(也参见本文,man 7 glob
以及本节)。因此,例如:
ax*b
匹配a
,然后是任意数量的x
es(甚至没有),然后是b
: ab
, axb
, axxb
, axxxb
, ...a[xz]*b
匹配a
后跟任意数量的字符,其中每个是x
或z
,后跟b
:ab
, axb
, azb
, axxb
, axzb
, azxb
, azzb
, axxxb
, ...a(xyz)*b
匹配a
,后跟零次或多次出现的字符串xyz
,后跟b
:ab
, axyzb
, axyzxyzb
, axyzxyzxyzb
, ...在这种情况下,您似乎只是在搜索文本。你不需要使用任何正则表达式元字符一样.
,*
或者\
有特殊的含义。这就是为什么我建议传递-F
标志,这使得grep
搜索“固定字符串”而不是执行正则表达式匹配。
但是,如果您只想匹配从行首开始的匹配,那么您确实想使用正则表达式元字符: ^
,正如mjb2kmn 建议的那样。这将您的比赛锚定到行的开头。在这种情况下,您将运行grep '^ki' trial_file.txt
.
有关选项grep
支持的更多信息,请参阅man grep
和GNU Grep 手册。
虽然在一般我建议封闭在正则表达式'
'
的报价在这种情况下没有,引用是必要的,因为shell不执行任何扩展上ki
或^ki
将它们传递到前grep
。
vir*_*ius 10
我认为你在这里期待 shell 风格的通配符,但你得到的是一个正则表达式。搜索时,ki*
您要求的是文字k
后跟 0 个或多个i
s。
第一行也不包含“ki”。
如何正确执行此操作取决于您要匹配的究竟是什么。
如上所述,grep "ki"
可能是您想要的,或者如果您只想匹配以“ki”开头的行,则需要grep "^ki"
.
^
表示行的开头。
归档时间: |
|
查看次数: |
1828 次 |
最近记录: |