grepで単語単位で検索(“is”は対象とするが”this”は対象にしたくない)
はじめに
英単語一覧データが CSV ファイルとして提供されている場合に "is" を検索したいが、 "this" や "English" は対象から外したい、
といったことを grep
コマンドで実現する方法です。
検証環境
検索対象の英文サンプルを用意
今回処理させたい英文のサンプルを用意します。
実存主義思想で有名なサルトルの言葉です。
余談ですが『存在と無』という書籍では「人間は自由という刑に処せられている」 という思想を主張しているように、自由(自分で決められること)は責任を伴います。
上記の英文に対して、 to
とう文字で検索してみることにします。
普通に grep
コマンドを利用した場合
普通に grep to
してみます。
本来調べたかった "to" という文字以外に、 "into" という文字も見つかってしまいます。
grep -w
コマンドを利用した場合
grep
コマンドに -w
オプションを付けて実行してみます。
grep -w
コマンドとはなに?
grep -w
コマンドとは何でしょう?
このコマンドは、指定された文字列が「単語」として含まれている場合のみ出力します。
ここでいう「単語」は、英数字とアンダースコア(_)から構成される文字列のことです。
grep -w ls
で検索した場合を例に上げます。
抽出できる文字列は以下の通りです。
ls
ls-remote
(-
が区切り文字扱いとなる )ls.txt
(.
が区切り文字扱いとなる )
抽出できない文字は以下のとおりです。
lsof
false
tools
ls_outout.txt
(_
は区切り文字として認識されない )
CSVを絞り込む際に便利
便利な例として、CSVを絞り込む場合に有効です。
以下のようなCSVを用意します。
カラムのどこかに bb
を含む行を抽出する場合、普通に抽出するとすべての行が抽出されてしまいます。
grep ',bb,'
だと3行目が抽出できません。
grep -w
を使えば想定通りの結果が得られます。
ひとこと
正規表現と組み合わせて利用することもできますが、多くのケースでは固定文字列で検索することになるでしょう。-F
オプションを付与して正規表現を利用しないようにすることで、高速化が図れます。
ディスカッション
コメント一覧
まだ、コメントがありません