基本上我从ls -la
命令获取行:
-rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file
并希望获得文件大小(442)。我已经尝试了cut
和sed
命令,但是没有成功。使用基本的UNIX工具(cut,sed,awk ...),如何从stdin获取特定列,其中分隔符为/ +/
regexp?
答案 0 :(得分:14)
如果您想使用cut
进行操作,则需要先填充空格(tr -s ' '
),因为cut
不支持+
。这应该有效:
ls -la | tr -s ' ' | cut -d' ' -f 5
使用sed
(GNU sed)执行此操作时需要更多工作:
ls -la | sed -r 's/([^ ]+ +){4}([^ ]+).*/\2/'
如果你使用grep替代品(GNU grep),那么手指会更多一点:
ls -la | grep -Eo '[^ ]+( +[^ ]+){4}' | grep -Eo '[^ ]+$'
答案 1 :(得分:5)
解析ls
输出比你想象的更难。请改用专用工具,例如stat
。
size=$(stat -c '%s' some_file)
ls -la some_file | awk '{print $5}'
可能会破解的一种方法是,如果数字使用空格作为千位分隔符(这在某些欧洲语言环境中很常见)。
答案 2 :(得分:2)
使用以下方法管道输出:
awk '{print $5}'
或者甚至更好地使用这样的stat命令(在Mac上):
stat -f "%z" yourFile
或(在Linux上)
stat -c "%s" yourFile
将以字节为单位输出文件大小。