如何从此文件的每一行提取 CSV 文件名

如何从此文件的每一行提取 CSV 文件名

我有一个文件,其中包含如下行:

-rw-rw-rw 1 root root 6379 May 24 2016 test1.CSV 
-rw-rw-rw 1 root root 23249 May 25 2016 test2.CSV 
-rw-rw-rw 1 root root 2995 May 26 2016 test3.CSV 

我只需要保留 CSV 文件名。我必须使用正则表达式,但我不知道是哪一个。

预期结果为“test1.CSV \n test2.CSV \n test3.CSV”。

答案1

您可以使用grep

grep -io '[^ ]*\.csv' filename

-i, --ignore-case 忽略大小写区别,以便仅大小写不同的字符相互匹配。

-o, --only-matching 仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

[^ ]*\.csv匹配除以 .csv 结尾的空格之外的任何字符

我假设文件名没有空格

或者你可以使用awk

awk '{print $(NF)}' filename | grep -i '\.csv'

变量$(NF)是每行的最后一个字段

答案2

尝试这个:[^ ]* *$

或者简单地说,如果相关的话,gawk '{print $NF}'

答案3

尝试这个,

awk '$NF~/CSV$/ {print $NF}'  file
  • 提取以 CSV 结尾的行并打印最后一个字段

答案4

您可以使用“awk”:

awk '{print $9}' files

只要文件名是该行中的第 9 个字段,它就会起作用。

相关内容