You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell实现将第2个空格后内容视为单列的列格式化解决方案

解决方法

你的问题出在column -t会把所有空格都当作列分隔符,导致带空格的扩展名称被拆成了多列。既然文件路径本身没有空格,我们可以用awk来精准拆分,把第一个空格前的路径作为第一列,剩下的所有内容(不管有多少空格)合并成第二列,而且这个方案是通用的,不会局限于固定列数。

直接用这个命令就能搞定:

for f in */*/manifest.json; do echo -n "$f "; jq -r '.name + " " + .version' "$f"; done | awk '{first=$1; $1=""; print first "\t" substr($0,2)}'

如果想要表格对齐更美观,可以再结合column工具,指定制表符作为分隔符:

for f in */*/manifest.json; do echo -n "$f "; jq -r '.name + " " + .version' "$f"; done | awk '{first=$1; $1=""; print first "\t" substr($0,2)}' | column -t -s $'\t'

原理说明

  • awk的逻辑很简单:
    1. 先把第一个字段(无空格的文件路径)存到变量first里;
    2. 清空第一个字段,这样剩下的内容就是原行去掉路径后的部分(前面会多一个空格);
    3. 用制表符分隔路径和substr($0,2)(去掉开头多余空格后的剩余内容),确保后面所有带空格的内容都被合并成一列。

处理后的输出会是整齐的两列:

cjpalhdlnbpafiamejdnhcphjbkeiagm/1.14.22_0/manifest.json  uBlock Origin 1.14.22
dbepggeogbaibhgnhhndojpepiihcmeb/1.62.4_0/manifest.json   Vimium 1.62.4
dffhipnliikkblkhpjapbecpmoilcama/0.3_0/manifest.json       Swap My Cookies 0.3
gcbommkclmclpchllfjekcdonpmejbdp/2017.12.6_0/manifest.json __MSG_about_ext_name__ 2017.12.6
gdbofhhdmcladcmmfjolgndfkpobecpg/4.19_0/manifest.json      Don't track me Google 4.19
pkehgijcmpdhfbdbbnkijodmdjhbjlgp/2017.11.20_0/manifest.json __MSG_name__ 2017.11.20

这个方案完全符合你的要求:既实现了两列的正确拆分,又不会只适配固定列数——哪怕扩展名称有更多空格(比如叫My Awesome Extension),也能完整合并到第二列里。

内容的提问来源于stack exchange,提问作者Mark Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:52:58