git log
命令,改编自https://stackoverflow.com/a/9074343/13430450并由给出
$ git log --graph --abbrev-commit --decorate --format=format:'%>|(33)%C(bold blue)%h%C(reset) %<(60,mtrunc)%C(auto)%d%C(reset) %C(blue)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
产生一些漂亮的类似表格的输出,例如(删除颜色、提交消息和作者姓名),
* c075a92 (HEAD -> main, origin/main) (11 hours ago)
|\
| * cdc8801 (origin/feature4, feature4) (12 hours ago)
| * b4fa188 (13 hours ago)
| * 60b26f9 (tag: tag_sth) (14 hours ago)
* | c96bc85 (origin/bugfix58, bugfix58) (15 hours ago)
* | 39be3ca (16 hours ago)
|/
* 2176b77 (tag: v0.2) (17 hours ago)
* c9c1035 (tag: v0.1) (18 hours ago)
* d28fbcc (19 hours ago)
我正在寻找任何基于 sed/awk 的方法来将上述内容通过管道传输并获得
* c075a92 (HEAD -> main, origin/main) (11 hours ago)
|\
| * cdc8801 (origin/feature4, feature) (12 hours ago)
| * b4fa188 (13 hours ago)
| * 60b26f9 (tag: tag_sth) (14 hours ago)
* | c96bc85 (origin/bugfix, bugfix) (15 hours ago)
* | 39be3ca (16 hours ago)
|/
* 2176b77 (tag: v0.2) (17 hours ago)
* c9c1035 (tag: v0.1) (18 hours ago)
* d28fbcc (19 hours ago)
使输出更加简洁。换句话说,所有行上出现的任何连续空格都应替换为单个空格。
git log
命令中),那就加分了。使用
sed
将 2 个或更多空格的链转换为制表符,然后使用 column
将制表符分隔的输入格式化为列:
$ sed 's/ */\t/g' file | column -s $'\t' -o ' ' -t
* c075a92 (HEAD -> main, origin/main) (11 hours ago)
|\
| * cdc8801 (origin/feature4, feature4) (12 hours ago)
| * b4fa188 (13 hours ago)
| * 60b26f9 (tag: tag_sth) (14 hours ago)
* | c96bc85 (origin/bugfix58, bugfix58) (15 hours ago)
* | 39be3ca (16 hours ago)
|/
* 2176b77 (tag: v0.2) (17 hours ago)
* c9c1035 (tag: v0.1) (18 hours ago)
* d28fbcc