Получить конкретный текст между определенным тегом во всех файлах в каталоге - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть несколько сотен .txt файлов в каталоге следующего формата:

<DOC>
<DOCNO> 33 </DOCNO>
<SOURCE> URL v.01 </SOURCE>
<URL> www.url.com/extension.html </URL>
<DATE> 2019/12/29/ </DATE>
<TIME>  </TIME>
<AUTHOR>  </AUTHOR>
<HEADLINE>
        The title is here 
</HEADLINE>
<TEXT>
        Text that I want
</TEXT>
</DOC>

Я хотел бы манипулировать каждым отдельным файлом, чтобы файл содержал только текст между *Теги 1005 * и </TEXT> (т.е. Text that I want)

Я пробовал следующий код, но он, похоже, не выполняет то, что мне нужно:

find /root/Desktop/data/data -type f | xargs sed -n '/<TEXT/,/<\/TEXT/p'

Как я могу это сделатьиспользуя скрипт bash (желательно с использованием sed)?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Если существует не более одной пары тегов, которые вы ищете, и вам не нужны символы новой строки в тексте:

#!/bin/bash

for file in /root/Desktop/data/data/*.txt; do
  echo $(cat "$file" | tr -d '\n' | sed -nE 's/<TEXT>(.*)<\/TEXT>/\1/p')
done
0 голосов
/ 19 ноября 2018

Вы хотите удалить из файлов все, кроме текста между тегами TEXT, верно?Вот как ты это делаешь.

find /root/Desktop/data/data -type f -execdir sed -i '0,/<TEXT>/d;/<\/TEXT>/,/<TEXT>/d' {} +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...