sed / awk - удалить все теги, кроме двух тегов и простых текстов

Вот пример моего текстового файла:

<w:r><w:t>
<w:r w:rsidR="00D171FD">
<w:t></w:t>
</w:r><w:r>
<w:t xml:space="preserve">
This is a sample text </w:t>
</w:r>
<w:highlight w:val="green"/>
<w:r w:rsidR="00D171FD">
<w:color w:val="FF0000"/>
<w:t>
Sample text</w:t>
</w:r>

Проблема в том, что мне нужны только чистый текст и только следующие теги : [ 113]
color w:val="FF0000"
highlight w:val="green"

Как это можно сделать?

1
задан 7 March 2013 в 22:50

1 ответ

С вышеупомянутой командной строкой это будет функционировать, если у Вас никогда не будет их выражением как текст:

  1. <w:
  2. \>

Командная строка:

cat Myfile.txt  | grep -E "color w:val=|highlight w:val=" | sed s/"<w:"/""/g | sed s/"\/>"/""/g

Объяснение:

  • grep -E, --extended-regexp PATTERN
    Интерпретируйте ШАБЛОН как расширенное регулярное выражение
  • | логичный ИЛИ в ШАБЛОНЕ grep
  • | символ вертикальной черты в среде оболочки
  • sed s/"<w:"/""/g замены глобально (везде) "<w:" с пустой строкой ""

Примечание: возможно записать sed во многих другой путь и более компактным способом. Я думаю, так является дидактическим и может использоваться в большем количестве широкого спектра возможности, когда необходим для замены выражением с другим.

Это - вывод:

highlight w:val="green"  
color w:val="FF0000"  
0
ответ дан 7 March 2013 в 22:50

Другие вопросы по тегам:

Похожие вопросы: