#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