grep /egrepを使用して2つの引用符間のすべてのタブ文字を取得する方法

grep /egrepを使用して2つの引用符間のすべてのタブ文字を取得する方法

bashでgrep /egrepを使用して、2つの引用符の間のすべてのタブ文字を見つけます。

頑張った

grep -r . -e "\".*\t.*\""
grep -r . -e "\".*\\t.*\""
grep -r . -e "\".*\\\\t.*\""
grep -r . -e '\".*\t.*\"'
grep -r . -e '\".*\\t.*\"'
grep -r . -e '".*\t.*"'
grep -r . -e '".*\\t.*"'

しかし、望む結果は得られません。次は、次grepを含むすべての行を生成します\t

grep -r . -e "\".*\\\\t.*\""
grep -r . -e '\".*\\t.*\"'
grep -r . -e '".*\\t.*"'

次は、次grepを含むすべての行を生成しますt

grep -r . -e "\".*\t.*\""
grep -r . -e "\".*\\t.*\""
grep -r . -e '".*\t.*"'
grep -r . -e '\".*\t.*\"'

しかし、これらのどれも実際のテーブル作成機を見つけることはありません。私は何が間違っていましたか?

答え1

GNU(あなたが使用していると仮定)はgrep基本的に\tタブについて知りません。 POSIX正規表現では、\tリテラルは一致しt\\t一致します\t

テキストタブ文字をPOSIX正規表現と一致させるには、式にタブ文字を挿入します。

grep -r $'".*\t.*"' .

これは、文字列のエスケープシーケンスをC言語の対応する意味に$'...'拡張するために使用されます。bash

-PGNUでPerlに似た正規表現(PCRE)を有効にすると、式のタブ文字がgrep認識されます。\t

grep -P -r '".*\t.*"' .

また、あなたの表現が一致することに注意してください。

"hello" <tab> "world"

関連情報