2

如何在bash历史输出中更改行号和历史条目之间的文本字符串格式?

如果history在 bash 打印中运行,例如:

5  history

如何将其更改为此,例如:

5....history

或者

5_anyString_history

此外,对齐history已经通过调整空格数来完成。如何也包含此功能?也就是说,如果 . 用作字符串,如何根据行号中的位数改变点数?另外,我想删除前导空格。

4

2 回答 2

1
history | sed 's/^\( *[0-9]*\) */\1../'

当我这样做时history,行号后面总是有两个空格。对齐是通过改变数字的空格数来完成的。

这是如何替换前导空格(数量不同)的示例:

history | sed 's/^ */&\n/; :a; s/ \(.*\n\)/.\1/; ta; s/\n//'

编辑:

这个版本的工作方式与上面的第二个类似,但是它将点移动到数字之后,因此没有前导空格,并且可变的点数导致历史条目左对齐。

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- 分支标签
  • 用点替换换行符前的一个空格
  • ta- 如果进行了替换,则分支到标签:a,一旦所有前导空格都被替换,继续通过分支指令
  • 删除换行符
  • 捕获两个捕获组中的点和非空格(数字)并排除数字后面的空格
  • 并交换两组(所以点现在在数字之后)
于 2012-05-11T11:24:59.503 回答
0
type history 
history is a shell builtin

告诉我们,历史是内置的,因此您需要获取 bash 的源代码并对其进行修改。

于 2012-05-11T08:58:55.790 回答