2015-04-24 44 views
1

我是Linux的新手。最近我学会了如何使用grep命令以及如何在每行的开头搜索文本。但似乎有两种模式可以实现这一点。插入符号在grep命令模式中的不同位置?

例如,如果我要搜索所有行以“W”,我可以执行:

grep "^W" filename 

大多数文章用这种方式暗示。但我也遇到过另一种模式:

grep ^"W" filename 

它也可以。

那么这两者有什么区别?它们是否相等?如何将脱字符放在引号之外(我的意思是,在大多数语言中,模式应该是一个字符串,并且脱字符号一定要放在引号内)?

回答

3

这工作,因为击运行命令之前评估每个对引号的内容(可能扩大的变量,如果有的话),之后将其删除。你甚至可以写grep ""^"ab"c"""" filename,它也可以工作,至于Bash的值最终只是^abc

+1

不只是bash下(可能)是任何shell [POSIX外壳(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html )兼容将做到这一点。它被称为[quoterelation](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_07)。 –

1

这里发生的事情是,你并不需要引用您的正则表达式。例如,你可以做

grep W filename 

你也可以做

grep ^W filename 

bash将采取任何引用的字符串,并在执行命令之前回到它的“字符串值”。所以^"W"作为^W被传递给grep命令,而且原本没有引号的是明智之举。

所以

grep ^W filename 

grep ^"W" filename 

是相同的。

1

您可以使用grep命令来不带引号的正则表达式太..但它需要一些处理外壳扩展,并委托给搜索工具(grep的)之前分析它(用于论证部分和开关)。

因此,它被认为是很好的做法,引号内给出的参数。

例:grep hello file需要额外的努力,查明hello为其中的grep "hello" file不争论。

哪里可以找到区别:

grep "-i hello" filegrep -i hello file,并在后一种情况下grep -i "hello" file ... i是开关忽略大小写和"hello"是争论。

更多here

HTH

+0

我认为你的意思是'-i',目前这会在文件'hello'和'file'中寻找'i'。 –

+0

是的..你是对的..更新..谢谢:) –

相关问题