お知らせ

現在サイトのリニューアル作業中のため、表示が崩れているページが存在することがあります。

sed:簡単な置換

2024/01/22 17:10 OS::Linux::コマンド

置換をするためのコマンドだが、PCREは基本使えない(自前でビルドすれば使える)

大抵のケースでPerlを使った方が楽だが、Busybox系のディストリなどで入っていない環境では重宝する。

オプション

  • -l入力からケツ改行を消す
    CLI入力するとケツに改行が入るのでそれを除去できる
  • -p入力行を処理する
  • -eスクリプトを流せるphp -rのようなもの
  • -i[ext]ファイル置換。extに指定があるとバックアップファイルが生える
    • sed -i.bak -e 's/aaa/bbb/' path/to/file

チートシート

改行を改行コードに変換

コマンドを使う必要がある

入力

cat <<'EOF' | sed ':a;N;$!ba;s/\n/\\n/g'
aaa
bbb
ccc
ddd
EOF

出力

aaa\nbbb\nccc\nddd

コマンドの意味合い

コマンド 意味合い
; 恐らくコマンドの終わり
: ラベル。今回の:aはラベルa
N 入力の次の行をパターンスペースに読み込む
$ 最終行にマッチ
! マッチしない(アドレスとコマンドの間に入れる必要がある)
b ラベルに分岐する。baはラベルaに分岐。gotoみたいなもんだと思う

つまり入力の次の行をパターンスペースに読み込み、最終行にマッチしなければ入力の次の行をパターンスペースに読み込み、マッチすればs/\n/\\n/gが発動するのだと思われる。