我的目录中有几百个.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
)来做到这一点?
答案 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