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
-P
GNUでPerlに似た正規表現(PCRE)を有効にすると、式のタブ文字がgrep
認識されます。\t
grep -P -r '".*\t.*"' .
また、あなたの表現が一致することに注意してください。
"hello" <tab> "world"