$ 1はsedでは使用できません。

$ 1はsedでは使用できません。

XMLタグを含む複数のファイルがあります。たとえば、次のようになります。

<h> PIDAT <h> O

<h>この行の最初の行以降のすべての項目を削除しなければ、次のような結果が得られます。

<h>

このために私は使用しています

sed -i -e 's/(^<.*?>).+/$1/' *.conll

しかし、sedはそれを認識していないようです$1。 (私が知っている限り、$1グループに含まれていないものはすべて削除する必要があります。)これを達成する方法はありますか?正しい方向を教えてくれたら本当にありがとうございます。

PS:正規表現アプリケーションでこれらの式をテストしましたが、動作しますが、コマンドラインでは動作しません。

ベストアンサー1

sed逆参照はPerlに似ている\1など\2の形式を取ります。また、BRE(基本正規表現)を使用する場合、およびグループを形成する括弧を$1エスケープする必要があります。あるいは、オプションで拡張正規表現を使用することもできます。(...)?+-E

sed正規表現は貪欲なので、最初の行で停止せずにその行<.*>で一致します。そしてそれは言うべきではありません(すでに一致するものがないので、それを選択する必要はありません)。<h> PIDAT <h>>.*?.*?

これはうまくいくかもしれません:

sed -i -Ee 's/^(<[^>]*>).*/\1/' *.conll

[^>]を除くすべての項目と一致するため、一致しますが一致>しません。<[^>]*><h><h> PIDAT <h>

おすすめ記事