2016-05-24 10 views
1

私は、2M行以上の巨大なコーパスからタグを削除するためにsedを使用しようとしていますが、特殊なアルファベット(例えばẽéó) 'は任意の文字' 正規表現コーパスからsedはドット(。)で特殊なアルファベットと一致しません

サンプル(。):

<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 

それはほとんどの人にとって驚異的でしたが、私が言及した特殊なアルファベット文字のためにまだ残っています。私は何をすべきか?あなたの特定のケースで

+0

コードはあなたのサンプル入力に私のために動作します。あなたはコードの失敗の例を示すことができますか?使用した入力と出力の両方を表示します。あなたが受け取りました。 – John1024

+1

ロケールの設定とファイルのエンコーディングは、追加するimportabtの詳細になります。具体的には、 'C'ロケールでは、各バイトは個々の文字としてカウントされますが、ファイルがUTF-8のようなマルチバイトまたは可変長エンコーディングを使用する場合、非ASCII文字は複数のバイトを占有します。 – tripleee

+1

正規表現を使用してXML/HTMLを解析または編集すると、非常に壊れやすい可能性があります。通常のアドバイスは、XML固有のパーサーを使用することです。 –

答えて

1

は、おそらく最も簡単な方法は、タグの内容と一致するように[^>]文字クラスを使用することです:

​​

このタグのみのコンテンツに一致するという利点もあり、元のregexpは最初のタグの先頭から最後のタグの最後まで削除します。

foo baz 

をこれ1は<a...><b...>を置き換えます:たとえば、元の式は<a...> bar <b...>に置き換えられます

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

を与え

foo bar baz 
+0

@TobySpeightよく、この長さのコードは説明が不要で、ここには魔法はありません。私は問題を解決するためだけにこの質問に答えました。人々を教育するためではありません。ごめんなさい。 – pdg

+0

私はあなたのための説明を追加しました。 HTH –

関連する問題