获取目录中所有文件中某个标记之间的特定文本

时间:2018-11-19 19:21:00

标签: bash sed tags

我的目录中有几百个.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>

我想操纵每个文件,以便该文件仅包含<TEXT></TEXT>标记(即Text that I want)之间的文本

我尝试了以下代码,但是它似乎没有满足我的要求:

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

如何使用bash脚本(最好使用sed)来做到这一点?

2 个答案:

答案 0 :(得分:2)

您想从文件中删除TEXT标记之间的文本以外的所有内容,对吗?这就是您的做法。

find /root/Desktop/data/data -type f -execdir sed -i '0,/<TEXT>/d;/<\/TEXT>/,/<TEXT>/d' {} +

答案 1 :(得分:1)

如果您要查找的标签最多为一对,并且您不想在文本中使用换行符:

#!/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