古い記事 / トップ

sed は行単位で文字列処理を行うプログラム。
文字や行の削除、挿入、置換などができる。
標準入力を処理して標準出力に出すフィルタとして機能する。

レシピ


先頭/末尾の一行を消す:

sed 1d
sed '$d'


1行目から10行目を消す/出す:

sed 1,10d
sed '1,10!d'
sed -n 1,10p


「RT」が含まれる行を消す/出す:

sed /RT/d
sed -n /RT/p


1行目から2行おきに消す/出す:

sed 1~2d
sed -n 1~2p


1行目はそのまま出し残りの行はマッチした行だけ出す:

sed -ne 1p -e /RT/p


2行目の前/後に文字列/改行を挿入:

sed '2i 文字列'
sed '2i \\'
sed '2a 文字列'
sed '2a \\'


空行を削す:

sed '/^$/d'


行頭から3番目に登場したタブを消す:

sed -r 's/\t//3'


条件にマッチしたファイルの中身を置き換える:

find . -name "*.txt" | xargs sed -i 's/\t/ /g'
grep -rl "hello" . | xargs sed -i s/hello/HELLO/


正規表現:後方参照、大文字小文字、個数指定、OR

echo 'ABCDE...vwxyz' | sed -r 's/([A-D])/\L\1/g;s/([w-z])/\U\1/g'
echo ' A\n  B\nC' | sed -r 's/^ {1,4}/\t/;s/(A|C)/X/g'


条件にマッチした行の前に行を追加:

sed '/ABC/i ###あやしいK###'


ホールドスペースを使って行を逆順にする: catの逆のtacと同等

sed -n 'G;h;$p'  aa.txt


オプションやコマンド

- d : 行を消す。
- !d : 指定以外の行を消す。
- p : 表示。明示的に。"-n" との組み合わせ。
- $ : 最後の行を表す。
- = : 現在の行番号
- i,a : 文字列の挿入
- "-e" (or オプションなし) : 弱い正規表現。
- "-r" or "-E" : perl などに近い正規表現。
- "-u" : unbufferd. "tail -f" との組み合わせなどに。
- "-n" : 各行を表示しない。
- "-i" : ファイルを直接書き換える。

参考


- Man page of SED
http://linuxjm.osdn.jp/html/GNU_sed/man1/sed.1.html
- sed コマンド | コマンドの使い方(Linux) | hydroculのメモ
https://hydrocul.github.io/wiki/commands/sed.html
- Linuxコマンド集 - 【 sed 】 文字列の置換、行の削除を行う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/
- 26.3.5 ホールドスペースの使い方 | HWB
http://hwb.ecc.u-tokyo.ac.jp/current/applications/textprocessing/sed/holdspace/

一言メッセージ送信: 私宛の一言メッセージをこっそり送信できます(非公開)