我是Linux的新手。最近我学会了如何使用grep命令以及如何在每行的开头搜索文本。但似乎有两种模式可以实现这一目标。
例如,如果我想搜索以“W”开头的所有行,我可以执行:
grep "^W" filename
大多数文章建议使用这种方式。但我也遇到了另一种模式:
grep ^"W" filename
它也有效。
那么这两者有什么区别?它们是否相同?如何将插入符号放在引号之外(我的意思是在大多数语言中,模式应该是一个字符串,插入符号应该放在引号内)?
答案 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" file
和grep -i hello file
以及grep -i "hello" file
.. i
是忽略大小写的开关,"hello"
是参数。
了解更多here
HTH