2014-10-05 2 views
0

У меня есть источник так:Grep линукс регулярных выражений в исходном HTML

.more code 
.more code 
.more code 
<textarea class="logarea" rows="15" name="log" spellcheck=FALSE>sometext 
sometext 
sometext 
sometext 
</textarea><br/><br/> 
.more code 
.more code 
.more code 

Итак, как Grep все между '<textarea class="logarea" rows="15" name="log" spellcheck=FALSE>' и '</textarea><br/><br/>'?

+0

Какой код вы написали, чтобы добиться этого? – JakeGould

+1

Просто [не] (http://blog.codinghorror.com/parsing-html-the-cthulhu-way/). – Quentin

+0

У меня есть код bash, и я хочу, чтобы grep этот текст в переменную, и сохранить в файл. – devbgs

ответ

1
awk '/<textarea class="logarea" rows="15" name="log" spellcheck=FALSE>sometext/,/<\/textarea><br\/><br\/>/ {print}' input 

Это производит вывод:

<textarea class="logarea" rows="15" name="log" spellcheck=FALSE>sometext 
sometext 
sometext 
sometext 
</textarea><br/><br/> 

Чтобы получить только текст между этими линиями, но за исключением обеих этих линий:

$ awk '/<\/textarea><br\/><br\/>/{f=0} f{print} /<textarea class="logarea" rows="15" name="log" spellcheck=FALSE>sometext/{f=1}' input 
sometext 
sometext 
sometext 
+0

Да. Я хочу только текст между тегами. – devbgs

+0

@devbigOS OK. См. Обновленный ответ. – John1024

0

Это может быть возможно через pcregrep,

$ pcregrep -M -o '(?s)<textarea class="logarea" rows="15" name="log" spellcheck=FALSE>\K.*?(?=\n<\/textarea><br\/><br\/>)' file 
sometext 
sometext 
sometext 
sometext 
0

К сожалению, команды Unix являются ориентированными на линию, а не многолинейными. Мое обходное решение таково:

sed 's/$/\\n/' | tr -d '\n' | grep -o '<textarea.*</textarea>' | sed 's/\\n/\n/g'