grep 语法用于搜索带单引号的字符串?

grep 语法用于搜索带单引号的字符串?

所以,我有一个如下所示的 .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命令:

  1. grep
  2. require(jquery)
  3. 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

相关内容