如何在bash历史输出中更改行号和历史条目之间的文本字符串格式?
如果history
在 bash 打印中运行,例如:
5 history
如何将其更改为此,例如:
5....history
或者
5_anyString_history
此外,对齐history
已经通过调整空格数来完成。如何也包含此功能?也就是说,如果 . 用作字符串,如何根据行号中的位数改变点数?另外,我想删除前导空格。
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
,一旦所有前导空格都被替换,继续通过分支指令type history
history is a shell builtin
告诉我们,历史是内置的,因此您需要获取 bash 的源代码并对其进行修改。