Извлечь каталог из файла журнала с помощью sed - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь проанализировать файл application.log, в котором много строк, которые соответствуют приведенному ниже синтаксису.

"Error","jrpp-237","10/13/11","02:55:04",,"File not found: /indexUsa~.cfm The specific sequence of files included or processed is: c:\websites\pj7fe4\indexUsa~.cfm '' "

Мне нужно использовать какой-то тип команды, чтобы извлечь то, что находится между c:\websites\ и следующие \

например, в этом случае это будет pj7fe4

Я думал, что следующая команда будет работать ..

bin/sed -n '/c:\\websites\\/,/\\/p' upload/test.log

К сожалениючитая дальше, я теперь понимаю, что это вернет всю строку, содержащую c:\websites через \, и мне нужно знать промежуточную строку, а не всю строку.

Чтобы быть более сложным, мне нужно сопоставитьвсе подкаталоги каталогов, а не только одна конкретная строка, как для нескольких сайтов.

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Вы используете шаблоны диапазона неправильно.Вы не можете использовать его, чтобы ограничить команду (в этом случае печать) частью строки, только диапазоном строк.Вы также не можете избежать пробелов.

Попробуйте это: sed 's/.*c:\\websites\\\([0-9a-zA-Z]*\)\\.*/\1/'

Здесь есть хорошее руководство по sed: Sed - Введение и учебное пособие Брюса Барнетта

0 голосов
/ 19 октября 2011

grep way:

grep -Po "(?<=c:\\\websites\\\)[^\\\]+(?=\\\)" yourFile

тест:

kent$  echo '"Error","jrpp-237","10/13/11","02:55:04",,"File not found: /indexUsa~.cfm The specific sequence of files included or processed is: c:\websites\pj7fe4\indexUsa~.cfm '' "'|grep -Po "(?<=c:\\\websites\\\)[^\\\]+(?=\\\)"
pj7fe4
...