gret命令模式中插入符号的不同位置?

时间:2015-04-24 06:11:33

标签: regex linux bash grep

我是Linux的新手。最近我学会了如何使用grep命令以及如何在每行的开头搜索文本。但似乎有两种模式可以实现这一目标。

例如,如果我想搜索以“W”开头的所有行,我可以执行:

grep "^W" filename

大多数文章建议使用这种方式。但我也遇到了另一种模式:

grep ^"W" filename

它也有效。

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

class BAccount extends Phalcon\Mvc\Model {
    // use DB B
}

您也可以

grep W filename

Bash将接受任何带引号的字符串,并返回其"字符串值"在执行命令之前。因此,grep ^W filename ^"W"作为^W传递给grep命令,并且最初没有更明智的报价。

所以

grep ^W filename

grep ^"W" filename

是一样的。

答案 2 :(得分:1)

你可以在没有引号的情况下使用正则表达式的grep命令..但是在将它委托给搜索工具(grep)之前,shell需要进行一些处理以扩展和分析它(对于参数部分和开关)。

因此,在引号内提供参数被认为是一种好习惯。

例如: grep hello file需要额外的努力才能将hello标识为grep "hello" file没有的参数。

在哪里找到差异:

在后一种情况下,

grep "-i hello" filegrep -i hello file以及grep -i "hello" file .. i是忽略大小写的开关,"hello"是参数。

了解更多here

HTH