history | sed 's/^\( *[0-9]*\) */\1../'
私がそうするときhistory
、行番号の後に常に2つのスペースがあります。位置合わせは、数の前のスペースの数を変えることによって行われます。
これは、先頭のスペース(数が異なります)を置き換える方法の例です。
history | sed 's/^ */&\n/; :a; s/ \(.*\n\)/.\1/; ta; s/\n//'
編集:
このバージョンは上記の2番目のバージョンと同様に機能しますが、数字の後にドットを移動するため、先頭にスペースがなく、ドットの数が可変であるため、履歴エントリは左揃えになります。
sed 's/^ */&\n/; :a; s/ \(.*\n\)/.\1/; ta; s/\n//;s/\(\.*\)\([^ ]*\) */\2\1/'
1....aaa bbb ccc
22...ddd eee fff
333..ghi jkl mno
仕組みは次のとおりです。
- スペースの最初のシーケンスの後に改行を追加します(分割統治)
:a
-分岐のラベル
- 改行の前の1つのスペースをドットに置き換えます
ta
-置換が行われた場合にラベルに分岐し:a
、先頭のスペースがすべて置換されたら、分岐命令を超えて続行します
- 改行を削除します
- 2つのキャプチャグループでドットと非スペース(数字)をキャプチャし、数字の後のスペースを除外します
- 2つのグループを入れ替えます(ドットが数字の後に来るように)