読者です 読者をやめる 読者になる 読者になる

sedで置換ではなく検索でのデリミタを '/' (スラッシュ) 以外に変更する

Linux

置換の場合は、Perlでも受け継がれている、sの次の文字がデリミタ、になるので、

sed -ne 's/pattern/replace/' file
sed -ne 's#pattern#replace#' file

が等価になってまあ問題ないのだが、検索のパターンの場合がよくわからなかった。まさか

sed -ne '/pattern/p' file
sed -ne '#pattern#p' file

とするわけにも行かないし。

ググってみたのだがなぜかcutの話が出たり、置換の方についてしか書かれてなかったりばっかりだったので、man sedするも、ご存知の通りGNU sedのmanはかなり省略されているので参考にならない。

ってのも後から確認すると、「sed デリミタ」でググったトップ10に普通にちゃんと載ってるし、man sedの方にも載ってたんだけど……。

まあとにかくinfo sedに詳細があるってことでそっち見てみた。infoはEmacsだからかなり使えなくて困ったけどまあ該当の記述を発見。

sed -ne '\#pattern#p' file

な感じで\を前置すれば行けるということだった。

何度も書くけどググってもman sedでもちゃんと読めばまあ載ってるんだけどね。ブログに書くくらいしとけば二度と忘れずに済みそうなんで書いとく。

あと、infoがマジで使いづらくてつらいんで、その辺なんとかしたい。Emacs覚えた方がいいのかね。

あ、BSD sedでも行けるの確認済み。