如何让ls命令仅显示修改日期、时间及文件名并保持列对齐?
解决方案
一、修正sed命令移除多余列
你之前的sed命令没去掉第二列数字,是因为sed默认不支持\d匹配数字,得换成[0-9]或[[:digit:]],同时要精准匹配前两列(权限+链接数)。用扩展正则表达式(-E参数)更简洁:
ls -goh | sed -E 's/^[^ ]+ +[0-9]+ +//'
解释:
^[^ ]+:匹配开头的非空格字符(权限列)+ +:匹配列之间的一个或多个空格[0-9]+:匹配第二列的数字(链接数)
替换为空后,就剩下大小、修改日期、时间和文件名。
二、用awk实现对齐输出
要实现列对齐,用awk的printf格式化输出更可靠,直接处理ls -lh的输出(-h生成人类可读的大小格式):
ls -lh | awk '{ size = $5 month = $6 day = $7 time = $8 # 提取含空格的完整文件名 name = substr($0, index($0, $9)) # 格式化输出:大小右对齐占6位,月份3位,日期2位,时间5位,文件名左对齐 printf "%6s %3s %2s %5s %s\n", size, month, day, time, name }'
执行后会得到你想要的对齐效果:
28M Mar 29 12:03 foo.dmg 96B Feb 9 15:33 bar.app 128B May 16 01:59 aaa 160B May 16 01:59 bbb
更简洁的替代方案
如果不需要ls -goh的额外参数,直接用awk提取目标列更省心,不用处理sed的正则问题:
ls -lh | awk '{printf "%6s %3s %2s %5s %s\n", $5, $6, $7, $8, substr($0, index($0,$9))}'
内容的提问来源于stack exchange,提问作者user22996855
相关产品推荐
相关产品推荐

