#author("2017-09-27T01:14:50+09:00","","") #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 "[[:space:]]" ファイル名 * タブをターミナル画面に入力し検索する方法 [#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で指定した拡張子のみ対象としサブディレクトリも検索する方法]] -[[「バイナリファイルに一致しました」を除外する方法>逆引きUNIXコマンド/「バイナリファイルに一致しました」を除外する方法]] #htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)