Linux(Unix 含む) であるテキストファイルの中から、条件に合致する行だけを出力する bash スクリプトについてです。
結構使うので記録しておきます。
作業メモ
0. 前提条件
- Cygwin 1.7.15 での作業を想定していますが、Linux, BSD でも同様です。
- 使用するシェルは bash です。
1. テキストファイルの準備
今回のテストでは以下のようなテキストファイルを使用する。 (固定長のテキストファイルです)
【ファイル名: test.txt】
1 2 3 4 5 6 7 8 9 10 |
|
2. bash スクリプトの作成
たとえば、上記のテキストファイルの中で、各行末が “( 2 )” か “( 3 )” で終わる行だけをそのまま抽出したい場合の例です。 判定部分に正規表現を使用しています。
【ファイル名:test.sh】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
【注意】 IFS (= Internal Field Separator : 内部フィールド区切り文字) という特殊変数にはデフォルトで「半角スペース」が設定されています。 設定を変更せずにこのまま使用すると、取得した行内の複数の半角スペースが 1 個に圧縮されたようになってしまいます。 事前に IFS に「改行」を設定し、処理終了後に元に戻すようにしています。
また、判定部分の正規表現はダブルクォーテーションで囲まない、半角スペースは “\s” ではなく “\ ” を使用しないといけいないようです。 正規表現の詳細については、別途各自お調べください。
3. bash スクリプトの実行
以下のようにして bash スクリプトを実行する。 今回は分かりやすくする為、使用するテキストファイルと bash スクリプトは同じディレクトリに配置している。
1 2 3 4 |
|
判定部分は、正規表現を色々弄ればどうにでもなります。 当方、Cygwin でも Linux でも意外とよく使うので、今回記録しておいた次第です。
以上。