#navi(../)

*grepでタブを検索する方法 [#v565ca40]
grepコマンドをターミナルで実行した場合、タブの検索ができません。~
以下の方法でタブを検索することができます。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* $'\t' を利用する [#y078b0e3]
&color(red){''2012/6/22 追記''};

bashで動作確認をしました。~
man bashをみると以下の記述がありました。
 クォート
        クォート (quoting) を使うと、特定の文字や単語のシェルに対する特別な意味を取り除けます。クォー
        ト を用いると、特殊文字の特殊な扱いを無効にすることや、予約語が予約語として識別されることを防
        いだり、パラメータの展開を防げます。
 <snip>
         $’string’ の形式を持つ単語は特殊な扱いを受けます。この単語は string に展開され、それから ANSI
        C 標準で仕様が決められている、バックスラッシュでエスケープされている文字に置き換えられます 。
        バックスラッシュエスケープシーケンスは、 (もし存在すれば) 以下のようにデコードされます:
               \a     警告 (ベル)
               \b     バックスペース
               \e     エスケープ文字
               \f     フォームフィード文字
               \n     改行文字
               \r     復帰文字
               \t     水平タブ文字
 <snip>

実際、$'\t'がtabになるかを確認してみます。~
16進数で09なのでHT(水平タブ)になります。
 [sakura@centos ~]$ echo -n $'\t' | hexdump -C
 00000000  09                                                |.|
 00000001
 [sakura@centos ~]$ echo -n $'\t\t' | hexdump -C
 00000000  09 09                                             |..|
 00000002

実際に以下のようなファイルでgrepしてみました。~
#ref(tab_test_file.txt)
 # one tab between the words.
 centos  5.7
 centos  5.8
 centos  6.1
 centos  6.2
 ubuntu  10.04
 ubuntu  12.04
 
 # two tab between the words.
 fedora          16
 fedora          17
 debian          lenny
 debian          squeeze
 
 # first character is tab.
         linux
         windows
         freebsd
- 実行結果~
いくつかの実行結果を記します。
-- 先頭がタブではじまる行を検索
 $ grep ^$'\t' tab_test_file.txt 
         linux
         windows
         freebsd
-- 2つのタブ
 $ grep $'\t\t' tab_test_file.txt 
 fedora          16
 fedora          17
 debian          lenny
 debian          squeeze
-- 1つのタブで検索
 $ grep $'\t' tab_test_file.txt 
 centos  5.7
 centos  5.8
 centos  6.1
 centos  6.2
 ubuntu  10.04
 ubuntu  12.04
 fedora          16
 fedora          17
 debian          lenny
 debian          squeeze
         linux
         windows
         freebsd
-- centosタブで検索
 $ grep centos$'\t' tab_test_file.txt 
 centos  5.7
 centos  5.8
 centos  6.1
 centos  6.2
-- タブの後ろの1がある場合
 $ grep $'\t'1 tab_test_file.txt 
 ubuntu  10.04
 ubuntu  12.04
 fedora          16
 fedora          17
 $ grep $'\t\t'1 tab_test_file.txt 
 fedora          16
 fedora          17

以上、動作確認したシェルはbashだけですが、$'\t'でタブを指定してgrepする方法を記述しました。

* [:space:]を利用する [#z8a554f4]
grepに\tを引数としてわたしてもタブ文字はヒットしません。~
検索方法‪として&color(red){スペースとタブの区別はできません};が[:space:]が有効です。~

* [:space:]の実行方法 [#nce92407]
下記のコマンドでタブを検索すると上記でも記した通り、スペースもヒットしてしまいますので注意してください。~

grep "&#91;&#91;:space:&#93;&#93;" ファイル名

* タブをターミナル画面に入力し検索する方法 [#r185814b]
bashを利用している場合は、タブキーを押してもタブ文字は入力されませんので、Ctrl+V, TABの操作でタブ文字を入力することができます。~

&color(red){赤字};の部分がキー操作になります。Ctrl+V、TABキーの順番で入力します。~

grep "&color(red){Ctrl+V, TAB};" ファイル名

* タブを検索するgrep用シェルを作成する [#qd4f06fc]
エディタを起動しタブを検索するgrepコマンド用シェルを作成すれば簡単に検索することができます。~
下記、スクリプトのgrep &color(red){"  "};はタブが入力されています。以下のスクリプトをコピーしてもスペースとしてコピーされますので使用する場合はタブに変更するかgrep_tab.shをダウンロードしてください。
#ref(grep_tab.sh)
 #!/bin/sh
 grep "	" $1

使用方法は以下の通りです。~
./grep_tab.sh ファイル名

* 関連資料 [#x8556075]
-[[grepでタブを検索する方法>逆引きUNIXコマンド/grepでタブを検索する方法]]
-[[grepでハイフン付のキーワードを検索する方法>逆引きUNIXコマンド/grepでハイフン付のキーワードを検索する方法]]
-[[grepで指定したキーワードに色をつける>逆引きUNIXコマンド/grepで指定したキーワードに色をつける]]
-[[grepで複数のキーワードを除外する方法>逆引きUNIXコマンド/grepで複数のキーワードを除外する方法]]
-[[grepで複数キーワードを利用する>逆引きUNIXコマンド/grepで複数キーワードを利用する]]
-[[複数パターン指定でgrepが遅い場合の対応方法>逆引きUNIXコマンド/複数パターン指定でgrepが遅い場合の対応方法]]
-[[grepで大文字小文字を区別しないで検索する>逆引きUNIXコマンド/grepで大文字小文字を区別しないで検索する]]
-[[grepコマンドでパターンヒットがあったファイルのファイル名のみ表示する方法>逆引きUNIXコマンド/grepでパターンヒットがあったファイルのファイル名のみ表示する方法]]
-[[grepで検索した行の前後も表示する方法>逆引きUNIXコマンド/grepで検索した行の前後も表示する方法]]
-[[grepコマンド単体で隠しファイルや隠しディレクトリも対象にする方法>逆引きUNIXコマンド/grep単体で隠しファイルや隠しディレクトリも対象にする方法]]
-[[ディレクトリ配下のファイルも対象にgrepする>逆引きUNIXコマンド/ディレクトリ配下のファイルも対象にgrepする]]
-[[grepで指定した拡張子のみ対象としサブディレクトリも含む再帰検索する方法>逆引きUNIXコマンド/grepで指定した拡張子のみ対象としサブディレクトリも検索する方法]]


#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS