Bash 如何使用regexp分隔符获取第n列
基本上,我从Bash 如何使用regexp分隔符获取第n列,bash,unix,text,text-processing,Bash,Unix,Text,Text Processing,基本上,我从ls-la命令中获取行: -rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file 并希望获得文件的大小(442)。我尝试了cut和sed命令,但没有成功。仅使用基本的UNIX工具(cut、sed、awk…),如何从stdin获取特定列,其中分隔符是/+/regexp?解析ls输出比您想象的要困难。改用专用工具,如stat size=$(stat -c '%s' some_file) 如果数字使用空格作为千位
ls-la
命令中获取行:
-rw-r--r-- 13 ondrejodchazel staff 442 Dec 10 16:23 some_file
并希望获得文件的大小(442)。我尝试了
cut
和sed
命令,但没有成功。仅使用基本的UNIX工具(cut、sed、awk…),如何从stdin获取特定列,其中分隔符是/+/
regexp?解析ls
输出比您想象的要困难。改用专用工具,如stat
size=$(stat -c '%s' some_file)
如果数字使用空格作为千位分隔符(这在一些欧洲地区很常见),ls-la some_file | awk'{print$5}'可能会中断
另请参见。通过以下方式传输输出:
awk '{print $5}'
或者我们最好使用这样的stat命令(在Mac上):
或者(在Linux上)
这将以字节为单位输出文件大小。如果要使用
剪切
执行此操作,则需要先压缩空间(tr-s'
),因为cut
不支持+
。这应该起作用:
ls -la | tr -s ' ' | cut -d' ' -f 5
在使用sed
(GNU-sed)进行操作时,需要做更多的工作:
如果您使用grep替代方案(GNU-grep),则需要稍微多用手指:
谢谢,你的回答很好,但是解析ls输出是一个很好的用法示例,然后才是真正的用法。+1表示“sed | cut”流。到目前为止,最灵活、最强大、最简洁的专栏搜索技巧。
stat -c "%s" yourFile
ls -la | tr -s ' ' | cut -d' ' -f 5
ls -la | sed -r 's/([^ ]+ +){4}([^ ]+).*/\2/'
ls -la | grep -Eo '[^ ]+( +[^ ]+){4}' | grep -Eo '[^ ]+$'