2

bashの履歴出力の行番号と履歴エントリの間でテキストの文字列形式を変更するにはどうすればよいですか?

historybashプリントで実行している場合、次に例を示します。

5  history

これに変更する方法、例えば:

5....history

また

5_anyString_history

また、historyスペースの数を調整することにより、すでに位置合わせが行われています。この機能も含めるにはどうすればよいですか?つまり、。文字列として使用されますが、行番号の桁数に応じてドット数を変更するにはどうすればよいですか?また、先頭のスペースを削除したいと思います。

4

2 に答える 2

1
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つのグループを入れ替えます(ドットが数字の後に来るように)
于 2012-05-11T11:24:59.503 に答える