ファイル内の文字列・行抽出
●特定文字から始まる文字列を抽出する
長文のファイルから特定の文字列を抽出する場合、grepコマンドを使用します。
grepコマンドの引数に、抽出したい文字列と、ファイルを指定し、更に追加条件として、特定の文字列から始まる抽出を行うため、「^」(キャロット)を付けることで、その文字列から始まるデータを抽出することができます。
[root@Lion ~]# grep -i "ja" country_list.txt ↑オプション「-i」で大文字、小文字を区別せず、「ja」を含む文字列を抽出 Japan Azerbaijan Jamaica Libyan Arab Jamahiriya ↑「ja」を含む文字列データが複数抽出されます。 [root@Lion ~]# grep -i "^ja" country_list.txt ↑オプション「-i」で大文字、小文字を区別せず、「ja」から始まる文字列を抽出 Japan Jamaica ↑「ja」から始まる文字列データが抽出されます。 |
●特定文字で終わる文字列を抽出する
特定の文字列で終わる抽出を行うため、「$」(ダラー)を付けることで、その文字列で終わるデータを抽出することができます。
[root@Lion ~]# grep -i "en" country_list.txt ↑オプション「-i」で大文字、小文字を区別せず、「en」を含む文字列を抽出します。 Argentina Armenia Benin Central African Republic Denmark Grenada Kenya Liechtenstein Montenegro Saint Vincent and the Grenadines Senegal Slovenia Sweden Turkmenistan Venezuela Yemen ↑「en」を含む文字列データが複数抽出されます。 [root@Lion ~]# grep -i "en$" country_list.txt ↑オプション「-i」で大文字、小文字を区別せず、「en」で終わる文字列を抽出 Sweden Yemen ↑「en」で終わる文字列データが抽出されます |
●特定文字列を行番号含めて表示する
grepコマンドを使用すれば、ファイル内の特定の文字列を検索して抽出できます。
しかし、その文字列がファイル内のどの行にあるかまではわかりません。
検索文字列を行番号と共に抽出したい場合は、grepコマンドにオプション「-n」を付けて実行します。
[root@Lion ~]# grep -in "en" country_list.txt ←行番号を付けて文字列を表示します。 7:Argentina 8:Armenia 19:Benin 33:Central African Republic 49:Denmark 70:Grenada 90:Kenya 100:Liechtenstein 116:Montenegro 148:Saint Vincent and the Grenadines 153:Senegal 159:Slovenia 168:Sweden 180:Turkmenistan 191:Venezuela 193:Yemen ↑「en」を含む文字列が行番号と共に表示されます。 |
●特定の文字列が含まれない行を抽出する
ファイルから特定の文字列を排除して、表示させるにはgrepコマンドに「-v」オプションを付けて実行します。
[root@Lion ~]# more country_list.txt ←ファイル内容を表示します。 Japan Afghanistan Algeria Andorra Angola Antigua and Barbuda Argentina Armenia Australia Austria[root@Lion ~]# grep -iv "an" country_list.txt ←「an」を含む行を排除して表示 Algeria Argentina Armenia Australia Austria Bahamas Bahrain Barbados Belarus Belgium Belize Benin ↑ anを含む行を含まずに結果表示されます。 |
●特定の文字列が含まれている行数を表示
grepコマンドに「-c」オプションを使用することで、特定文字列を含む行数が表示されます
[root@Lion ~]# grep -i "en" country_list.txt ←enを含む行を表示 Argentina Armenia Benin Central African Republic Denmark Grenada Kenya Liechtenstein Montenegro Saint Vincent and the Grenadines Senegal Slovenia Sweden Turkmenistan Venezuela Yemenenを含む行数を表示 [root@Lion ~]# grep -ic "en" country_list.txt ←enを含む行数が何行あるのか表示 16 ←16行ある |