【问题标题】:Matching file path using awk from a report使用报告中的 awk 匹配文件路径
【发布时间】:2020-02-19 04:56:37
【问题描述】:

尽管进行了多次尝试,但我无法找到正确的方法来使用 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

【问题讨论】:

  • 感谢您让我们知道您已经尝试过尝试,它始终建议您在问题中也以代码格式添加它们,因为我们都在这里学习。

标签: awk sed


【解决方案1】:

请您尝试关注一下。

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.

【讨论】:

    【解决方案2】:

    sed 还提供了一个相当简单的解决方案,即使用捕获组捕获第一个 '/'",Sa" 之间的文本,例如

    $ sed 's|^[^/]*\(/.*,Sa\)/.*$|\1|' file
    /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
    

    使用'|' 的替代分隔符代替'/' 以避免\/..\/. 的栅栏效应

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多