首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash中修改历史输出中的行号和历史条目之间的文本字符串格式?

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

Stack Overflow用户
提问于 2012-05-11 14:54:39
回答 2查看 111关注 0票数 2

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

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

代码语言:javascript
复制
5  history

例如,如何将其更改为以下内容:

代码语言:javascript
复制
5....history

或

代码语言:javascript
复制
5_anyString_history

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-11 19:25:00

代码语言:javascript
复制
history | sed 's/^\( *[0-9]*\) */\1../'

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

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

代码语言:javascript
复制
history | sed 's/^ */&\n/; :a; s/ \(.*\n\)/.\1/; ta; s/\n//'

编辑:

这个版本的工作原理类似于上面的第二个版本,但它移动了数字后面的点,因此没有前导空格,并且可变数量的点导致历史记录条目左对齐。

代码语言:javascript
复制
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

它是这样工作的:

在初始的空格序列之后添加一个换行符(divide和conquer)

  • :a - branching

  • replace表示换行符在换行符之前一个空格,使用dot

  • ta分支标记数字。如果进行了替换,则在替换所有前导空格后,继续通过分支instruction

  • remove newline

  • capture
  • :a (数字),并排除数字
  • 之后的空格,并交换这两个组(因此,点现在位于数字之后)
票数 1
EN

Stack Overflow用户

发布于 2012-05-11 16:58:56

代码语言:javascript
复制
type history 
history is a shell builtin

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10546796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档