grepを使用して一重引用符でテキストを検索しますか?


14

私はubuntu 12.04の埋め込み端末でgeditテキストエディタを使用しています。を使用してテキストを検索しようとしていますgrep。このコード行を検索したい

'type' => 'select'

私は試した:

grep -r '\'type\' => \'select\''

しかしgrep、結果は返されませんでした。

だから誰かが親切に上記のコードを検索する方法を教えてもらえますか?

回答:


17

検索文字列を二重引用符で囲みます。

grep "'type' => 'select'"

7

単一引用符で囲まれた単一引用符をエスケープすることはできません。[bash manual]で説明されているようにhttp://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes:):

文字を一重引用符( '' ')で囲むと、引用符内の各文字のリテラル値が保持されます。バックスラッシュが先行する場合でも、単一引用符の間に単一引用符が発生しない場合があります

したがって、異なるアプローチを使用する必要があります。

  1. 二重引用符を使用します。

    grep  "'type' => 'select'" file 
    
  2. 必要以上に複雑なソリューションを好む場合:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. 単一引用符を指定する代わりに、任意の単一文字をいつでも検索できます。

    grep  '.type. => .select.' file 
    

しかし、を使用するだけ"で、物事がより簡単になります。


私が探している文字列がPHPファイルにあり、変数が含まれている場合はどうなりますか?私はこれに本当に苦労しています。
オーブリーロバートソン

@AubreyRobertson適切に答えるには例が必要です。文字列のようなものを見つけたい場合$vargrep '$var' file.php、一重引用符で囲むことができます。詳細については、新しい質問を投稿して、ここにコメントを残してください。喜んでお手伝いします。
テルドン

私はそれを考え出した。grepは、ドル記号ではなくgrepを正規表現に使用しているため、配列参照(角括弧)でした。これが、grepを行おうとしていた行$output = $info['function']($variables); です。二重バックスラッシュで適切にエスケープする必要がありました。:これは、すべての後、私はgrepコマンドが言ったと行っているtargetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
オーブリー・ロバートソン

1

CDあなたの.txtファイルを含むディレクトリへ

cd /path 

それから:

使用できます grep "'type' => 'select'" name.txt

または:

`grep "'type' => 'select'" /path/file.txt

出力:

ここに画像の説明を入力してください


3
質問は一重引用符のみに関係し、ディレクトリ構造やgrepその他の(少し無関係な)機能には関係しません。
クリス14年

実際、@ Chrisは-r(OPが書き込むように)オプションを使用して、ファイル名は必要ありません。
ブレイディトレーナー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.