Sed

末尾一行削除

sed -e '$d'

行数指定表示(2行目から34行目)

sed -n '2,34p'

行数指定表示(2行目から最後まで)

sed -n '2,$p'

指定表示(行数指定から、特定の正規表現まで)

sed -n '123,/^abc$/p'
  • 開始行:上から最初に合致したもの
  • 終了行:開始行から、最初に合致したもの

正規表現から正規表現までを文字列に置換

sed "/b/,/j/c x\ny"

大文字・小文字区別しない置換

  • gで置換しているコマンドをgiに変えてあげる。
  • iはgrepと同じで大文字・小文字を区別しない。
sed 's/abc/&d/gi'

大文字・小文字関係なくabcでヒットした部分にdが付く動作となる。

改行コード変換

LF(Line Feed、Unixスタイル)とCRLF(Carriage Return + Line Feed、Windowsスタイル)があります。

CRLF -> LF

\r(キャリッジリターン)を削除し、テキストファイル内の改行コードをLF(Line Feed、Unixスタイル)に統一するためのものです。

sed 's/\r//g'

LF -> CRLF

各行の末尾にCRLF(Windowsスタイルの改行コード)を追加します。正規表現 s/$/\r/g では、$ は行の末尾を表し、それを \r で置換しています。これにより、各行の末尾にCRLFが挿入されます。

sed 's/$/\r/g'

複数置換する場合

;(セミコロン)を入れれば複数書くことができる。

sed 's/a/b/; s/b/c/'

BOM削除

sed '1s/^\xEF\xBB\xBF//'

sed による除去

コメント行を削除

sed '/^\s*#/d'

空行を削除

sed '/^\s*$/d'

コメント行と空行の両方を削除

sed '/^\s*#/d; /^\s*$/d'

複数行を1行として扱う

-z

a
b
c

a\nb\nc\nとして扱うことができる。

ファイル末尾の複数の空行を削除

sed -z 's/\n*$//g'