所以,我有一个如下所示的 .js 文件,我尝试使用下面的 grep 模式进行搜索。我不确定我犯了什么错误,但即使文件具有该模式,它也不会给出任何输出。我犯了什么错误以及如何纠正?
.js
文件:
var View = require('ampersand-view');
window.jQuery = require('jquery');
require('bootstrap');
require('bootstrap-tooltip');
var extend = require('lodash/assign');
我的要求是找到任何出现的情况:require('query')
grep 我正在使用:grep 'require('jquery')' index.js
答案1
单引号不能嵌入到单引号字符串中。尝试:
$ grep "require('jquery')" index.js
window.jQuery = require('jquery');
或者,您可以结束单引号字符串,添加转义单引号,然后重新启动单引号字符串:
$ grep 'require('\''jquery'\'')' index.js
window.jQuery = require('jquery');
讨论
为了更好地了解正在发生的情况,您可以使用 echo 语句来查看 shell 如何处理字符串:
$ echo 'require('jquery')'
require(jquery)
在上面的示例中,有两个单引号字符串:require(
和)
。就 shell 而言,该字符串jquery
是不带引号的。
$ echo "require('jquery')"
require('jquery')
因为 shell 接受单引号作为双引号字符串的一部分,所以上面的代码可以正常工作。
有时,为了避免 shell 扩展,需要将所有内容都放在单引号字符串中。在这种情况下:
$ echo 'require('\''jquery'\'')'
require('jquery')
上面有三个单引号字符串:require(
、jquery
、 和 )
。这些字符串之间是转义的单引号,以便 shell 将它们视为普通字符。
此答案假设 shell 是 bash、dash、ash 或其他 POSIX 或 bourne 派生的 shell。有关其他 shell 的信息,请参阅斯特凡·查泽拉斯的回答。
答案2
单引号不能嵌套,请在模式周围使用双引号:
grep "require('jquery')" file.js
当你这样做时:
grep 'require('jquery')' file.js
shell 首先根据单引号将模式分成 3 部分。首先是文字'require('
,jquery
然后是文字')'
。因此,实际上该模式被视为require(jquery)
,它与预期的任何内容都不匹配。
例子:
$ cat foo.js
var View = require('ampersand-view');
window.jQuery = require('jquery');
require('bootstrap');
require('bootstrap-tooltip');
var extend = require('lodash/assign');
$ grep "require('jquery')" foo.js
window.jQuery = require('jquery');
答案3
在大多数 shell 中,该'
字符是引用运算符,空格字符用于分隔命令的参数。因此你的 shell 会将该命令解析为 3 个参数来传递给该/bin/grep
命令:
grep
require(jquery)
index.js
在2
上面,'require('jquery')'
已被视为引 require(
连接有一个未引用的 jquery
连接有一个引 )
。
你想2
成为require('jquery')
。由于'
、(
和等)
对于 shell 来说是特殊字符,因此您需要以某种方式引用它。语法取决于 shell。在类似 Bourne 的 shellfish
和中(t)csh
,您可以使用双引号,它们将其识别为另一个引用运算符:
grep "require('jquery')"
在rc
类 shell ( rc
, akanga
, es
) 中,其中'...'
是唯一的引用形式,语法为:
grep 'require(''jquery'')'
双重'
内'...'
是rc
方法逃脱在'
这儿。
有关各种 Unix shell 中的特殊字符以及如何使用的详细信息引用/逃脱他们,看到如何像普通字符一样使用特殊字符?。
答案4
将搜索模式放在双引号中。
grep "require('jquery')" index.js