对于标准输入中的所有行,删除每行中同一位置出现的连续空格

问题描述 投票:0回答:1

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) 

使输出更加简洁。换句话说,所有行上出现的任何连续空格都应替换为单个空格。

  • 每行存在的单个空格不应删除,并保持原样(例如,不应删除上面“13小时前”中“小时”和“前”之间的单个空格)。
  • 如果这尊重终端颜色代码(这些代码包含在上面给出的长
    git log
    命令中),那就加分了。
git shell awk pipe stdin
1个回答
0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.