
sedで行頭以外の置換を指定する
sedで行頭を指定する場合、「…
2018/04/17 追記
ebanさんから、col -bでいけるよという教えをいただく。
col -bってのありまして
— eban (@eban) 2018年4月17日
あ、colでいけたんだ…(´・ω・`)。
大体のUNIX系OSならcol入ってるし、こっちのほうが良いね…。
以下のようにバックスペースキャラクタを含んだ文字列があるとする。
blacknon@BS-PUB-DEVELOP:~$ echo -e 'test\b\bES' teES
一見、バックスペースで前の文字が消えてるように見えるのだが、実際には見えないようにしているだけで、前の文字はまだ残っている。
blacknon@BS-PUB-DEVELOP:~$ echo -e 'test\b\bES' | cat -v test^H^HES
このバックスペース+前の文字を削除して、その結果を文字列として扱いたい場合、以下のようにsedで置換してやるといいだろう。
sed ':a;s/[^\x08]\x08//g;ta'
blacknon@BS-PUB-DEVELOP:~$ echo -e 'test\b\bES' | sed ':a;s/[^\x08]\x08//g;ta' | cat -v teES
scriptコマンドなどで取得したターミナルログに残っているバックスペースを削除する際なんかに使えると思う。