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

相關內容