2012-04-06 2 views
21

私はこのような行を含むファイルを持っています。私はラインが発見された場合、値が見つからない場合false、端末にtrueを返したいタブgrepでタブを検索しています

で区切ら

A B //。

私は grep 'A' 'file.tsv'を行うとき、それは(真/偽ではない)行に戻り しかし

grep 'A \t B' "File.tsv" 

または

grep 'A \\t B' "File.tsv" 

または

grep 'A\tB' 

または

何も返さないタブボタン

を押す

grep 'A<TAB>B' //。私はgrepを持つタブ区切りの値を検索するにはどうすればよい

grepを使用してブール値を返すにはどうすればよいですか。

+2

[grep $ 'A \ tB''、[ここ](http://stackoverflow.com/questions/9954515/grep-find-lines-that-c​​ontains-t)の回答 – sleepsort

答えて

25

タブ文字を使用し、\tエスケープを使用しないでください。 (最初にCtrl + Vを押す必要があります)また、grepはPerl 6(または/x修飾子のPerl 5)ではありません。スペースは重要であり、文字通り一致するので、\t\tの周りの余分なスペースでA \t Bを処理したとしても、スペースが実際にオリジナルに存在しない限りそうはなりません。標準出力、標準エラー、および終了コード:

は、戻り値として、あなたがプログラムからの応答の3種類を取得することを知っています。後者は成功の場合は0、何らかのエラーの場合は0ではありません(マッチングを行うほとんどのプログラムでは1が見つからず、2以上は何らかの使用エラーを意味します)。伝統的なUnixでは、終了コードだけが必要な場合はgrepから出力をリダイレクトします。 GNU grepでは代わりに-qオプションを使用できますが、移植性がないことに注意してください。伝統的なものとGNU grepの両方で-sは標準エラーを抑制することができますが、2つの方法の違いはいくつかあります。ほとんどのポータブルはgrep PATTERN FILE >/dev/null 2>&1です。

+1

からの回答です。 '\ t'のようにエスケープする*は、最近のGNU' grep'でPCRE正規表現を有効にする '-P'オプションで動作するかもしれません。 – geekosaur

+0

リテラルのTAB文字でさえ機能しません。タブ文字を押すと、何かのようなマイナス記号が現れますが、検索しません。 – Ank

+2

「何かのようなマイナス記号」が間違っています。 'bash'では、端末設定に応じて' Tab'自体がビープ音/点滅します。 'Ctrl' +' V'の後に 'Tab'が続くと、タブ文字が挿入されます。あなたはこれをターミナルやエディタで直接入力していますか? – geekosaur

14

二つの方法: -Pオプションを使用します。

grep -P 'A\tB' "File.tsv" 

は、Ctrlキーを入力してください+ v最初のタブ

grep 'A B' "File.tsv" 
+0

私は-Pスイッチが好きで、 "適切な" PerlスタイルのRegExpをオンにし、タブ文字を検索します。これは、一部のシステムでは動作が遅くなるか、まったく動作しないことに注意してください。あなたが '疑わしい'タブがあるが確かでない場合、 'grep -P" A \ s + B "'はAとBの間にあるすべてのタブと空白を悩ますはずです。 –

7

を入力してくださいここでそのようリテラルのタブで変数を作成するための便利な方法があります値:次のように続いて

TAB=`echo -e "\t"` 

、あなたはそれを使用することができます。

grep "A${TAB}B" File.tsv 

このように、リテラルタブは必要ありません。この方法では、パターン文字列の前後に二重引用符(一重引用符ではない)を使用する必要があります。そうしないと、変数参照は置き換えられません。

+1

これは、grep -P '\ t' * 'を使うことができなかったので、 –

関連する問題