如何在命令行使用正则表达式?

时间:2017-04-09 21:55:29

标签: sed centos cut

我从ls -alth获得了类似的输出:

drwxr-xr-x    5 root    admin   170B Aug  3  2016 ..
drwxr-xr-x    5 root    admin    70B Aug  3  2016 ..
drwxr-xr-x    5 root    admin     3B Aug  3  2016 ..
drwxr-xr-x    5 root    admin     9M Aug  3  2016 ..

现在,我想解析170B部分,这显然是人类可读格式的大小。我想使用cutsed执行此操作,因为我不想使用比必要更复杂/难以使用的工具。

理想情况下,我希望它足够强大,能够处理大小附带的BMK后缀,并相应地乘以1,{{相应地,1}}和1000000。但是,我没有找到一个很好的方法。

我在没有真正了解最佳方法的情况下尝试了一些事情:

1000

我希望这会有效,因为我可以在一个或多个空格上划分它。

但这不起作用。如何为ls -alth | cut -f 5 -d \s+ 提供正则表达式分隔符?或者是否有更简单的方法从cut

中仅提取文件的大小

我正在使用CentOS6.4

3 个答案:

答案 0 :(得分:2)

这个答案解决了问题的问题,但认为George Vasiliou's helpful find solution是一个潜在的优越选择。

  • cut仅支持单个,字面字符作为分隔符(-d),因此它不适合使用。

  • 为了提取以每行可变数量的空格分隔的标记(字段),awk是最好的工具,因此George Vasiliou提出的解决方案是最简单的:<登记/> ls -alth | awk '{print $5}'
    提取第五个以空格分隔的字段($5),这是大小。

  • 而不是先使用-h,然后将人类可读的后缀(例如BMG)重新转换回纯粹的< em> byte 计数(顺便提一下,乘数必须是1024的倍数,而不是1000),只需从-h命令中省略ls即可输出原始字节默认计数:
    ls -alt | awk '{print $5}'

答案 1 :(得分:2)

Alternative to the awk solution that will treat whitespace correctly , one can also use the find utility that can provide results similar to ls.

Actually you can use find to display directly size of the results without the need of any other tool/pipe like cut or awk.

So, to list mere bytes you can use:

$ find . -maxdepth 1 -printf %s\\n
173
3
684

You can combine filename + bytes in find with

$ find . -maxdepth 1 -printf %f-%s\\n
bsd.txt-173
file4-3
shellcolors.sh-684

You can consult man find to see a lot of available options under -printf.

Moreover, by removing -maxdepth option you can also have a listing of all the files in the subdirectories.

One more alternative is to use du utility, that is capable to provide results in human readable format:

$ du -a -b -h -d1
1.9M    ./appsfiles
173 ./bsd.txt
3   ./file4
684 ./shellcolors.sh

-a : all files and directories. Remove this option to get only directories size
-b : Reports the real size of file - Removing this option will report the disk size occupied by this file (i.e a file of 3 kB occupies 4K in reality)
-h : human readable size
-d1 : depth1

You can further parse the results of du with |cut -d" " -f1 or with |awk '{print $1}'

答案 2 :(得分:1)

我因为不得不查询awk(ward)语法并编写了自己的语法而感到恼火:

https://www.npmjs.com/package/cutr

安装方式

npm i -g cutr
ls --full-time | cutr -d ' +' -f 6-

或以类似的方式运行

ls --full-time | npx cutr -d ' +' -f 6-

您的命令可能是

ls -alth | cutr -f 5 -d '\s+'