Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用regexp分隔符获取第n列_Bash_Unix_Text_Text Processing - Fatal编程技术网

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 '[^ ]+$'