
所以,我有一個如下所示的 .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