Соответствие пути к файлу с использованием awk из отчета - PullRequest
0 голосов
/ 19 февраля 2020

Несмотря на множество попыток, я не могу найти правильный способ извлечения имен файлов из отчета с помощью 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

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Не могли бы вы попробовать следующее.

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.
1 голос
/ 19 февраля 2020

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

Альтернативные разделители '|' являются используется вместо '/', чтобы избежать эффекта заборов \/..\/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...