一重引用符で囲まれた文字列をgrepに渡すには?

一重引用符で囲まれた文字列をgrepに渡すには?

私が期待するものは次のとおりです。ディレクトリを再帰的に検索して、見つかったすべてのファイルで指定された文字列を見つけます。次のコマンドは、一般的に使用される呼び出しポートです。

find ./ | xargs grep -ns 'foobar'

ただし、引用符を使用すると、シェルにプロンプ​​トが表示foobarされ、コマンドは失敗します。>問題を引き起こした特定のコマンドは次のとおりです。

find ./ | xargs grep -ns 'add_action(\'save_post\','

バックスラッシュを使用して引用符をエスケープしようとしましたが、役に立ちませんでした。これを行う正しい方法は何ですか?

ベストアンサー1

一重引用符は一重引用符で終わり、その間にある他のすべての文字はバックスラッシュを含むままです。したがって、一重引用符の間に一重引用符を含めることはできません。 (しかし、あなたはできる'Single quotes aren'\''t ever really embedded in single quotes.'一重引用符を終了し、一重引用符をエスケープしてから、)のように新しい一重引用符セットを開始します。

提案:grep -r pattern .現在のディレクトリで繰り返しgrepを実行できる場合は、find + xargsを使用しないでください。

次のコマンドは同じ動作を持ちます。

grep -rns "add_action('save_post'," .
grep -rns 'add_action('\'save_post\', .

最後のコマンドは次のように解釈されます。

  1. 'add_action('->add_action(
  2. \'->'
  3. save_post->save_post
  4. \'->'
  5. ,->,

これらの部品を接続するために、grepコマンドはパラメータを受け取りますadd_action('save_post',

おすすめ記事