在bash中提取一个特定的单词

时间:2013-05-23 11:26:05

标签: linux bash sed awk cut

我在下面的表格中有一些行:

-rw-r--r-- sten/sefan anonymous 8593 2011-12-05 18:28 8M
-rw-r--r-- sten/sefan 8593 2011-12-05 18:28 8M

如何获得8593单行?

通过执行一些dry-run档案来检索这些行,例如:

$ tar jtvf zip64support.tar.bz2 
-rw-r--r-- stefan.bodewig/Domain Users 16195018 2011-10-14 21:05 100k_Files.zip
-rw-r--r-- stefan.bodewig/Domain Users 14417258 2011-10-14 21:05 100k_Files_7ZIP.zip

或:

$ tar jtvf bla.tar.bz2 
-rw-r--r-- tcurdt/tcurdt   610 2007-11-14 18:19 test1.xml
-rw-r--r-- tcurdt/tcurdt    82 2007-11-14 18:19 test2.xml

具体来说,在它后面加上YYYY-mm-dd的数字。

2 个答案:

答案 0 :(得分:7)

您在当前目录中获取文件大小的命令是

$ stat -c %s *

想要使用bashawkcut来做这件事,你的问题是一个很好的理由,因为在第一行它将是第四列,在第二列,它是第三列。解析ls is not recommended!

的输出

修改

由于该列号是gaurenteed,我会grep使用positive lookahead

$ tar jtvf zip64support.tar.bz2|grep -Po '[0-9]+(?= [0-9]{4}-[0-9]{2}-[0-9]{2})' 
16195018
14417258

答案 1 :(得分:2)

尝试一下:

tar jtvf bla.tar.bz2|awk '$0=$3'

你提到的问题

  

将数字加到YYYY-mm-dd后面的行中。

如果你真的想用grep做的话:

tar ... |grep -oP '\d+(?= \d{4}-)'