シェルスクリプトマガジン

第2回 コメント行を削除する

 4行目の「0 )」の後ろにある「sed “/^#/d” $2」は、先頭が「#」の行を削除する処理です。前回も利用した「sed」コマンドを使っています。sedコマンドで行を削除する場合、次の書式になります。

 「/」は区切り文字です。置換のときとは違い、「/」以外指定できません。「d」は削除を表しています。先頭の「#」は、「^」が行頭を表す特殊な文字で「^#」のように記述します。「$2」は、第2引数の値を呼び出すための特殊な変数です。

 5行目の「0 )」の後ろにある「grep -v “^#” $2」は、「sed “/^#/d” $2」と同じ処理を実行しています。「grep」は引数に指定した文字列を含む行を抜き出すコマンドです。ただし、「-v」オプションを指定することで一致しなかった行を抽出します。「^#」と「$2」は、sedコマンドと同じです。

 grepコマンドではなく、sedコマンドのままでもよかったのですが、プログラムはいろいろな書き方ができ、正解は一つではないことを示したかったので、あえてgrepコマンドを使いました。

 さらに後ろにある「| grep -v “^$”」では、前回利用した「|」(パイプライン)で、「grep -v “^#” $2」の実行結果を「 grep -v “^$”」に渡しています。「grep -v “^$”」では、空白行を削除しています。「^」は今回何度も使っている行頭を表す文字、「$」は前回も使いましたが、行末を表す文字です。「^$」をつなげることで行頭から行末までに文字が含まれない空白行になります。「-v」オプションにより空白行でない行が抽出されます。

 さらに後ろにある「| grep -v “^$”」では、前回利用した「|」(パイプライン)で、「grep -v “^#” $2」の実行結果を「 grep -v “^$”」に渡しています。「grep -v “^$”」では、空白行を削除しています。「^」は今回何度も使っている行頭を表す文字、「$」は前回も使いましたが、行末を表す文字です。「^$」をつなげることで行頭から行末までに文字が含まれない空白行になります。「-v」オプションにより空白行でない行が抽出されます。