grepでタブを検索する方法 †grepコマンドをターミナルで実行した場合、タブの検索ができません。 $'\t' を利用する †2012/6/22 追記 bashで動作確認をしました。 クォート クォート (quoting) を使うと、特定の文字や単語のシェルに対する特別な意味を取り除けます。クォー ト を用いると、特殊文字の特殊な扱いを無効にすることや、予約語が予約語として識別されることを防 いだり、パラメータの展開を防げます。 <snip> $’string’ の形式を持つ単語は特殊な扱いを受けます。この単語は string に展開され、それから ANSI C 標準で仕様が決められている、バックスラッシュでエスケープされている文字に置き換えられます 。 バックスラッシュエスケープシーケンスは、 (もし存在すれば) 以下のようにデコードされます: \a 警告 (ベル) \b バックスペース \e エスケープ文字 \f フォームフィード文字 \n 改行文字 \r 復帰文字 \t 水平タブ文字 <snip> 実際、$'\t'がtabになるかを確認してみます。 [sakura@centos ~]$ echo -n $'\t' | hexdump -C 00000000 09 |.| 00000001 [sakura@centos ~]$ echo -n $'\t\t' | hexdump -C 00000000 09 09 |..| 00000002 実際に以下のようなファイルでgrepしてみました。 # 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
以上、動作確認したシェルはbashだけですが、$'\t'でタブを指定してgrepする方法を記述しました。 [:space:]を利用する †grepに\tを引数としてわたしてもタブ文字はヒットしません。 [:space:]の実行方法 †下記のコマンドでタブを検索すると上記でも記した通り、スペースもヒットしてしまいますので注意してください。 grep "[[:space:]]" ファイル名 タブをターミナル画面に入力し検索する方法 †bashを利用している場合は、タブキーを押してもタブ文字は入力されませんので、Ctrl+V, TABの操作でタブ文字を入力することができます。 赤字の部分がキー操作になります。Ctrl+V、TABキーの順番で入力します。 grep "Ctrl+V, TAB" ファイル名 タブを検索するgrep用シェルを作成する †エディタを起動しタブを検索するgrepコマンド用シェルを作成すれば簡単に検索することができます。 #!/bin/sh grep " " $1 使用方法は以下の通りです。 関連資料 †
|