LinuxForum.Fans
Тема

Выборка по файлам используя регулярки

Автор: patt 2 сообщений 1136 просмотров
#86139

Есть файлы в с текстом в котором встречаются строки определённого вида (например /proj="(\w+)"[^>]\s+([\w\d])/), файлы расположены в директории и её поддерикториях, нужно пройтись по всем файлам регуляркой и получить текст формата $1=$2

тоесть:
файл1: "text text<text text proj='someProj'>my text<text>text text <text ........"
файл2:"text <text text='text' text proj='project'>another text<text text>......."
..........
не выходе должно быть:
somePoj=my text
project=another text
.........
Можно такое сделать чем то вроде sed|awk|gerp? или придётся на перле?

#86949
patt написал:
нужно пройтись по всем файлам регуляркой и получить текст формата $1=$2
patt написал:
Можно такое сделать чем то вроде sed|awk|gerp? или придётся на перле?

конечно можно!

patt написал:
(например /proj="(\w+)"[^>]\s+([\w\d])/)

я только не понял про кавычки: они двойные или одиночные?
кроме того, в примере без \s и как раз таки между словами >, а в регулярке почему-то НЕ >.
кроме того, в sed недопустимо \d (хотя \w допустимо), используйте [0-9].
и ещё, не надо \w пихать в символьный класс, для этого есть
[[:alpha:][:digit:]], это эквивалент перлового [\d\w] (это не sed глупая, так работает glibc. Увы).
В итоге:

text
$ echo "text text<text text proj='someProj'>my text<text>text text <text" |\
sed -r "s~.*proj='([^']+)'>([^<]+).*~\1=\2~"
someProj=my text
Войдите или зарегистрируйтесь, чтобы ответить.