sed不匹配带点(。)的特殊字母字符

时间:2016-05-24 18:01:38

标签: regex unix sed

我正在尝试使用sed从巨大的语料库中删除标签(超过2M行),但它不匹配特殊字母字符(例如ãẽéó)与'any character'正则表达式(。)

来自语料库的示例:

<ext id=1 cad="Opinião" sec="opi" sem="94a">
PT no governo  
Gilberto Dimenstein  

BRASÍLIA Pesquisa Datafolha publicada hoje revela um dado supreendente: recusando uma postura radical, a esmagadora maioria (77%) dos eleitores quer o PT participando do Governo Fernando Henrique Cardoso . 

我想删除所有标签(它们都遵循相同的结构,“ext id = [0-9] cad”等),所以我试图使用

sed 's/<.\+>//g' file1.txt > file2.txt  

它为大多数人创造了奇迹,但由于我提到的特殊字母字符,我仍然有一些剩余。我该怎么办?

1 个答案:

答案 0 :(得分:1)

在您的具体情况下,最简单的方法可能是使用[^>]字符类来匹配标记的内容:

sed 's/<[^>]\+>//g' file1.txt > file2.txt

这样做的另一个好处是只匹配标记内容,原始正则表达式将从第一个标记的开头直到最后一个标记的末尾删除。例如,给定

foo <a...> bar <b...> baz

原始表达式将替换<a...> bar <b...>

foo  baz

但是这个会取代<a...><b...>

foo  bar  baz