Есть файлы в с текстом в котором встречаются строки определённого вида (например /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? или придётся на перле?
LinuxForum.Fans
Выборка по файлам используя регулярки
Автор: patt
2 сообщений
1137 просмотров
нужно пройтись по всем файлам регуляркой и получить текст формата $1=$2
Можно такое сделать чем то вроде sed|awk|gerp? или придётся на перле?
(например /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
Войдите или зарегистрируйтесь, чтобы ответить.