删除ls -l输出中的多个空格

时间:2016-09-19 05:05:09

标签: linux bash shell command-line

我需要显示文件大小和文件名。像这样:

4.0K Desktop

我正在使用ls -l输出中的cut来提取这两个字段:

ls -lhS | cut -d' ' -f5,9

由于ls -l输出中有多个空格,我得到一些错误的输出,例如:

4.0K 19:54
4.0K 19:55
 6
 18:39
 31
 25

我该如何解决这个问题?

我需要仅使用管道完成此任务,并且没有bash脚本(输出可能是多个管道),最好没有sed,awk。

如果没有替代sed或awk的话 - 使用sed就可以了。

3 个答案:

答案 0 :(得分:2)

can avoid parsing ls output并使用stat命令作为GNU coreutils的一部分在bash中获取详细的文件信息。

 # -c  --format=FORMAT
 #         use the specified FORMAT instead of the default; output a newline after each use of FORMAT

 # %n     File name
 # %s     Total size, in bytes

 stat -c '%s %n' *

答案 1 :(得分:1)

在使用剪切之前,您可以使用translate character命令。

ls -lhS | tr -s ' ' | cut -d' ' -f 5,9

答案 2 :(得分:0)

或者你可以提交给awk:

$ ls -lhS | awk '$0=$5 OFS $9'

即。将整个记录$0替换为以输出字段分隔符$5分隔的字段$9OFS