首页 > 解决方案 > 使用报告中的 awk 匹配文件路径

问题描述

尽管进行了多次尝试,但我无法获得使用 awk 从报告中提取文件名的正确方法。

我有这样的输出。

found in file /home/cloudst/homes/james/Maildir/cur/1580910042.2931_0.s3.mydomain.com:2,Sa/PURCHASE ORDER KALI-1374Wpdf.gz/PURCHASE ORDER KALI-1374Wpdf.exe/FILE:0000
found in file /home/cloudst/homes/james/Maildir/cur/1580910052.2932_0.s3.mydomain.com:2,Sa/PURCHASE ORDER KALI-1374Bpdf.gz/PURCHASE ORDER KALI-1374Bpdf.exe
found in file /home/cloudst/homes/james/Maildir/.afolder/cur/1580910152.2935_0.s3.mydomain.com:2,Sa/PURCHASE ORDER KALI-1364Cpdf.gz/PURCHASE ORDER KALI-1374Dpdf.exe

我需要提取实际的文件路径。这里,实际的文件路径是

/home/cloudst/homes/james/Maildir/.afolder/cur/1580910152.2935_0.s3.mydomain.com:2,Sa

对于第一行。如何使用 awk、sed 或任何使用正则表达式的命令从该结果中提取实际文件路径?

预期的输出将是

/home/cloudst/homes/james/Maildir/cur/1580910042.2931_0.s3.mydomain.com:2,Sa
/home/cloudst/homes/james/Maildir/cur/1580910052.2932_0.s3.mydomain.com:2,Sa
/home/cloudst/homes/james/Maildir/.afolder/cur/1580910152.2935_0.s3.mydomain.com:2,Sa

标签: awksed

解决方案


请您尝试以下操作。

awk 'match($0,/\/[^,]*,[a-zA-Z]+/){print substr($0,RSTART,RLENGTH)}' Input_file

说明:为上述代码添加详细说明。

awk '                                ##Starting awk program from here.
match($0,/\/[^,]*,[a-zA-Z]+/){       ##Using match function of awk to match regex \/[^,]*,[a-zA-Z]+ which means match till comma then till alphabets in lines.
  print substr($0,RSTART,RLENGTH)    ##Printing sub-string whose starting point is RSTART and ending point is RLENGTH.
}
'  Input_file                        ##Mentioning Input_file here.

推荐阅读