sed の必要最小限メモ
2015-09-09-1
[Programming]
sed は行単位で文字列処理を行うプログラム。
文字や行の削除、挿入、置換などができる。
標準入力を処理して標準出力に出すフィルタとして機能する。
先頭/末尾の一行を消す:
1行目から10行目を消す/出す:
「RT」が含まれる行を消す/出す:
1行目から2行おきに消す/出す:
1行目はそのまま出し残りの行はマッチした行だけ出す:
2行目の前/後に文字列/改行を挿入:
空行を削す:
行頭から3番目に登場したタブを消す:
条件にマッチしたファイルの中身を置き換える:
正規表現:後方参照、大文字小文字、個数指定、OR
条件にマッチした行の前に行を追加:
ホールドスペースを使って行を逆順にする: catの逆のtacと同等
文字や行の削除、挿入、置換などができる。
標準入力を処理して標準出力に出すフィルタとして機能する。
レシピ
先頭/末尾の一行を消す:
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/
この記事に言及しているこのブログ内の記事