2016-10-05 6 views
0

は私がHow do I find all files containing specific text on Linux?で完璧な答えを見つけたと思ったので、私はそれを試してみました:特定のテキスト(バックスラッシュを含む)を含むすべてのファイルを見つける方法は?

[[email protected] ~]$ grep -rnw '/var/www/concrete5.7.5.9/' -e "Concrete\Core\Block\BlockController" 
[[email protected] ~]$ 

なしのショー、私は試合が行われている必要があります知っています。

[[email protected] ~]$ grep -rnw '/var/www/concrete5.7.5.9/concrete/blocks/html' -e "BlockController" 
/var/www/concrete5.7.5.9/concrete/blocks/html/controller.php:5:use \Concrete\Core\Block\BlockController; 
/var/www/concrete5.7.5.9/concrete/blocks/html/controller.php:7:class Controller extends BlockController 
[[email protected] ~]$ 

また、バックスラッシュを無駄にエスケープしてみました。

[[email protected] ~]$ grep -rnw '/var/www/concrete5.7.5.9/' -e "Concrete\\Core\\Block\\BlockController" 
[[email protected] ~]$ 

また、一重引用符を使用しないでください。

Linuxでバックスラッシュを含む特定のテキストを含むすべてのファイルを見つけるにはどうすればよいですか?

答えて

1

一重引用符を使用し、バックスラッシュをエスケープします。

grep -rnw '/var/www/concrete5.7.5.9/' -e'Concrete\\Core\\Block\\BlockController' 
+0

それは私が見つけたものです。 '-e'は何ですか?ありがとう – user1032531

+0

-e regexpパターンを取ります。バックスラッシュは正規表現でエスケープ文字です。二重引用符を使用する場合は、バックスラッシュを4つ使用する必要があります。なぜなら、バックスラッシュはbashのscape文字なので、バックスラッシュを使用する必要があります。 –

0

一重引用符を使用してください。

grep -rnw '/var/www/concrete5.7.5.9/' -e 'Concrete\Core\Block\BlockController' 
+0

すでに試してみましたが、行っていません。しかし、私は一歩一歩進んで、一重引用符を使用し、別のバックスラッシュでバックスラッシュをエスケープしようとしました!多分あなたの答えを更新する必要がありますか?ありがとう! – user1032531

+0

私はそれについて考えましたが、チェックするのは怠惰でした。 – Smithson

+0

それが必要であることが分かります。私を困らせたのは、二重引用符から一重引用符に変更して、バックスラッシュをエスケープしなければならないということでした。私はそれぞれを試しましたが、同時にではありませんでした:( – user1032531

0

grepは正規表現として文字通りではなく、パターンを解釈するためのオプション-Fを持っています。例:

$ cat infile 
use \Concrete\Core\Block\BlockController; 
class Controller extends BlockController 
$ grep 'Concrete\Core\Block\BlockController' infile  # No match! 
$ grep -F 'Concrete\Core\Block\BlockController' infile # Matches! 
use \Concrete\Core\Block\BlockController; 
関連する問題