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'