sedもちょっとやってみた

sedもちょっとやってみたdotinstallでsedもやってみました。今回も、ドットインストール

Macにもsedは入っているようなんだけど、Linuxのsedと由来が違うようで使いにくいらしい。ということで、Homebrewでgnuのsedをインストールした。

$ brew install gnu-sed

これで、gsedコマンドが使えるようになる。Macだとこれにしておけば良さそう。

sedとは

コマンドラインでテキストを色々操作できるコマンド。

基本操作

$ gsed -e '3d' names.txt

3行目を削除して標準出力に表示する。

$ gsed -i.bak '3d' names.txt

3行目を削除してファイルを更新する。その際に、-i.と拡張子名をつけておくと、バックアップファイルを作成してくれる。

ファイルから実行

  1. 3dとだけ記述して、ex1.sedという形式で保存。
  2. gsed -f ex1.sed とすると、ファイルの条件で処理を実行する。

パターンスペース

3d: addressとcommandの合成 => 3行目をdする

1行1行下記の処理を行っている。

  1. fileから1行読み込んでパターンスペースに格納
  2. addressにマッチするか確認し、マッチしたらcommandを実行
  3. パターンスペースを表示する

-nオプションをつけると最後の表示をしないようにできる。

アドレス

  • 3d : 3行目削除(以下略)
  • 3!d : 3行目以外
  • 1d;3d : 1行目と3行目を削除
  • 1,3d : 1行目から3行目を削除(範囲)
  • 1~2d : 1行目から2飛ばしで削除
  • 3,$d : 3行目から最後の行まで削除
  • /i$/d : iが最後のものだけ削除(正規表現)
  • アドレスを削除すると全ての行に対して実行する

コマンド

  • d : delete
  • p : print
  • q : quit その行で処理を終了させる
  • i : insert
  • a : append
  • y : 文字の置換
  • s : 文字列の置換
$ gsed '1i\tsuika' names.txt

1行目に文字を挿入する。

$ sed 'y/t/T/' names.txt
$ sed 'y/to/TO/' names.txt # t->, o->O 順番が対応している

(全ての行に対して)tをT(oをO)に置き換える。

$ gsed 's/dadada/HONDA/' names.txt      # -> 1つ目だけ行う
$ gsed 's/dadada/HONDA/g' names.txt     # -> 全てに対して行う
$ gsed 's/dadada/HONDA/2' names.txt     # -> 2番目だけに対して行う
$ gsed 's/dadada/HONDA/ig' names.txt    # -> 全てに対して大文字小文字関係なく行う
$ gsed 's/[d]adada/HONDA/g' names.txt   # -> 正規表現も使える
$ gsed 's/[0-5]/【&】/' names.txt     # -> マッチしたものの前後に何かしたい
$ gsed 's/\([0-5]\) \(.*\)/\2 【\1】/' names.txt # -> 括弧の塊ごとに処理をする

dadadaをHONDAに置き換える。

ホールドスペース

パターンスペースを拡張した概念。

  • h : パターンスペースをホールドスペースにする
  • g : ホールドスペースをパターンスペースにする
  • x : 交換する

参考

Pocket
LINEで送る

You may also like...