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 で検索した場合を例に上げます。
抽出できる文字列は以下の通りです。
lsls-remote(-が区切り文字扱いとなる )ls.txt(.が区切り文字扱いとなる )
抽出できない文字は以下のとおりです。
lsoffalsetoolsls_outout.txt(_は区切り文字として認識されない )
CSVを絞り込む際に便利
便利な例として、CSVを絞り込む場合に有効です。
以下のようなCSVを用意します。
カラムのどこかに bb を含む行を抽出する場合、普通に抽出するとすべての行が抽出されてしまいます。
grep ',bb,' だと3行目が抽出できません。
grep -w を使えば想定通りの結果が得られます。
ひとこと
正規表現と組み合わせて利用することもできますが、多くのケースでは固定文字列で検索することになるでしょう。-F オプションを付与して正規表現を利用しないようにすることで、高速化が図れます。







ディスカッション
コメント一覧
まだ、コメントがありません