【问题标题】:How to alter the string format of the text between the line number and the history entry in the output of history in bash?如何在bash历史输出中更改行号和历史条目之间的文本字符串格式?
【发布时间】:2012-05-11 06:54:38
【问题描述】:

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

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

5  history

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

5....history

5_anyString_history

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

【问题讨论】:

  • 您希望 BASH 能够再次处理您的更改历史文件还是按照您描述的方式格式化输出?
  • 我只是想更改输出以便我更容易查看,所以我不想更改任何内部处理。

标签: bash history


【解决方案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 如果进行了替换,一旦所有前导空格都被替换,继续通过分支指令
  • 删除换行符
  • 在两个捕获组中捕获点和非空格(数字)并排除数字后的空格
  • 并交换两组(所以点现在位于数字之后)

【讨论】:

  • 虽然您的回答非常有用且清晰,但如果您评论 sed 命令以表明它们的作用,这将对我有所帮助,因此我更容易适应它们(尤其是第二个中的分支)。顺便说一句,我想删除前导空格。
【解决方案2】:
type history 
history is a shell builtin

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2011-06-28
    • 2015-01-17
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多