sed一行野郎

ネタを大量に拾ってきたので、遊んでます。楽しすぎ。

## スペーシング {{{
# 1行空ける
sed G
# 空白行を除いて1行空ける
sed '/^$/d;G'
# 開けたスペースを取り除く
sed 'n;d'
# マッチした行の上に空白行
sed '/regexp/{x;p;x}'
# マッチした行の下に空白行
sed '/regexp/G'
# マッチした行の上下に空白行
sed '/regexp/{x;p;x;G}'
# }}}

## 行番号 {{{
# イマイチな行番号
sed =
# 何故だか2行に表示されるので、2行を1行に結合する。
sed = | sed 'N;s/\n/\t/'
# 何故かawk。
awk '{print NR,"\t",$0}'
# 右揃え。prel風に書くと、s/^/     / *(.{6,}\n)/ つまり・・・"  |   123|"と切り取る。
sed = | sed 'N;s/^/     /; s/ *\(.\{6,\}\)\n/\1 /'
# 空白行を除いて
sed '/./=' | sed '/./N; s/\n/ /'
# 右揃えで。
sed '/./=' | sed '/./{N; s/^/    /;s/ *\(.\{6,\}\)\n/\1 /}'
# wc -l
sed -n $=
# }}}

# 置換 {{{
# 普通の置換
sed 's/Linux/Windows/g'
sed 's;Linux;Windows;g'
sed 's,Linux,Windows,g'
sed 'sXLinuxXWindowsXg' # 荒技

# 次はここら変挑戦予定。
# }}}


## 行の表示 {{{
# 5行目
sed -n 5p
sed '5!d'
sed '5q;d'
# 3〜5行目
sed -n '3,5p'
sed -n '3,5q,d'
# 最初の行から、4行目まで
sed -n '1,4p'
sed 4q
# 5行目〜最後の行まで
sed -n '5,$p'
# 最後の行
sed -n '$p'
sed '$!d'
# 空行の削除
sed '/^$/d'
# }}}

## メモ {{{
# pattern space : 現在処理中の行
# hold space : レジスタ(クリップボード)
# 
# p	print
# q	quit
# n	next
# N	Next and insert
# G	append newline
# x	ホールドスペースとパターンスペースを入れ替える。
# }}}
2013-02-23
久しぶりにいじったので少し更新。
2007-04-25
Make本を見ていたら、ぐぐっとくるsedスクリプトがあった。s;foo;bar;でも置換出来る。便利かも。
2007-03-10
ちょっと追加。sed1line.txtどおりにやってみることにした。{x;p;x}の入れ替えはいいね。
2007-03-08
sed1line.txtを見つけたので、行の制御で遊ぶ。

参考資料