Извлечение каталога из файла журнала с помощью sed

#linux #sed #grep

#linux #sed #grep

Вопрос:

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

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

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

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

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

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

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

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

Ответ №1:

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

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

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

Ответ №2:

способ grep:

 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:websitespj7fe4indexUsa~.cfm '' "'|grep -Po "(?<=c:\websites\)[^\] (?=\)"
pj7fe4