
そこで、以下のような.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ステートメントを使用してシェルが文字列をどのように処理するかを確認できます。
$ echo 'require('jquery')'
require(jquery)
上記の例には、単一引用符で囲まれた2つの文字列(require(
および)があります)
。シェルに関する限り、文字列はjquery
引用されません。
$ echo "require('jquery')"
require('jquery')
シェルは二重引用符で囲まれた文字列の一部として一重引用符を受け入れるため、上記のコードは正しく機能します。
場合によっては、シェル拡張を避けるために、すべてを一重引用符で囲まれた文字列に入れる必要があります。この場合:
$ echo 'require('\''jquery'\'')'
require('jquery')
上に単一引用符で囲まれた3つの文字列があります:require(
、、jquery
および )
。これらの文字列は、シェルがそれを通常の文字として扱うようにエスケープされた一重引用符で区切られます。
この回答では、シェルがbash、dash、ash、または他のPOSIXまたはbourne派生シェルであると仮定します。他のシェルの詳細については、以下を参照してください。Stefan Chazerasの答え。
答え2
一重引用符は入れ子にできません。パターンの周りに二重引用符を使用してください。
grep "require('jquery')" file.js
これを行うとき:
grep 'require('jquery')' file.js
シェルは最初に一重引用符に基づいてパターンを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
ほとんどのシェルでは、この'
文字は引用演算子であり、空白文字はコマンドの引数を区切るために使用されます。したがって、シェルはコマンドを3つのパラメータに解析して/bin/grep
コマンドに渡します。
grep
require(jquery)
index.js
上記で考慮され2
ました'require('jquery')'
リーダー require(
接続があります引用しない jquery
接続がありますリーダー )
。
あなたが2
なりたいですrequire('jquery')
。'
、(
およびなどは)
シェルの特殊文字なので、何とか引用する必要があります。構文はシェルによって異なります。 Bourne'sなどのシェルfish
やシェルでは(t)csh
二重引用符を使用できます。これは別の引用符演算子として認識されます。
grep "require('jquery')"
唯一の参照型でrc
あるクラスシェル(rc
、、、)では、構文は次のとおりですakanga
。es
'...'
grep 'require(''jquery'')'
二重'
内部方法'...'
rc
脱出するここに'
。
さまざまなUnixシェルの特殊文字と使用方法の詳細引用する/脱出する彼らは見た通常の文字のように特殊文字を使用する方法は?。
答え4
検索パターンを二重引用符で囲みます。
grep "require('jquery')" index.js