[A-00052]Shellでファイルの中身の特定範囲を抜き出す

シェルスクリプトを使用してファイルの中身の特定範囲を抜き出す方法を記載しておく。

例えば下記のような文章があるとする。この中のTOPIC~ENDまでを抜き出したい場合を考える。

2023年6月29日 日曜日
晴れの日が気持ち良い
今日はのんびり家で過ごす。
買い物にも行かない。
TOPIC
宝くじが当たって30万円をゲットした。
とてもラッキーだ。
星座占いは最下位だった。
星座占いはあてにならない。
END
昼寝をしよう。
自分のストレス解消方法は寝る事だ。
cat ./sample.txt | awk '/TOPIC/,/END/'
anonymous-MacBook-Pro:test$ cat ./sample.txt | awk '/TOPIC/,/END/'
TOPIC
宝くじが当たって30万円をゲットした。
とてもラッキーだ。
星座占いは最下位だった。
星座占いはあてにならない。
END

SQLの特定範囲を抜き出す

応用例としてSQLの特定範囲を抜き出したいときに使用してみる。

例えばGROUP BY以下の行を全て抜き出したいとなった場合での応用例を考える。

SELECT
     count(1) as cnt,
     no,
     name
  FROM
      (
       SELECT
            no,
            name
        FROM
            TABLE_A
      ) as ta
GROUP BY
  no,
  name
ORDER BY
  no

GROUP BY以下の全行抽出したいので正規表現に[$]を用いて何が来てもマッチするようにしている。バックスラッシュで予約語としての機能を打ち消している。

cat ./sample.sql | awk '/GROUP/,/\$/'
anonymous-MacBook-Pro:test$ cat ./sample.sql | awk '/GROUP/,/\$/'
GROUP BY
  no,
  name
ORDER BY
  no

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*