次のように、各行で「of」で始まるすべての文字を削除する必要があります。
Acer_BB1_Locus_1_Transcript_2of285068_Confidence_0.000_Length_1696
Acer_BB1_Locus_1_Transcript_2
答え1
入力がユーザーロケールの有効なテキストであると仮定すると、次のことができます。
sed 's/of.*//' < input
置換of
と任意数*
の()数値()の後に空の文字列が続きます.
(したがって、ほとんどの実装では、ロケールの有効な文字を構成しない最初のバイトで停止します)。sed
入力したエンコーディングがユーザーのロケールと一致することを保証できず、一部の文字のエンコードが終わる文字o
エンコーディング(BIG5²、BIG5-HKSCS、GBK、GB18030など)の1つではない場合は、次のことがo
できます。
LC_ALL=C sed 's/of.*//' < input
テキストではない、またはロケールやGNU実装とは異なる文字マップを使用してエンコードされた入力の問題の例sed
:
$ locale charmap
UTF-8
$ printf 'Point of St\351phane\n' | sed 's/of.*//'
Point �phane
$ printf 'Point of St\351phane\n' | LC_ALL=C sed 's/of.*//'
Point
(ここで、Stéphane
latin-1またはlatin-0エンコーディングの使用は、sed
UTF-8文字マップを持つロケールで実行することによって処理されます。ここで、0xe9(0351)だけでは有効な文字の一部を形成できません。)
BIG5-HKSCS などの文字エンコーディングの問題の例は次のとおりです。
$ echo trèfle of concern | iconv -t BIG5-HKSCS | LC_ALL=C sed 's/of.*//'
tr�
$ echo trèfle of convern | iconv -t BIG5-HKSCS | LC_ALL=zh_HK.big5hkscs sed 's/of.*//' | iconv -f BIG5-HKSCS
trèfle
U + 00E8è
文字は0x88 0x6fでエンコードされるため、0x6fもエンコードですo
。sed
これらの文字を正しくデコードするには、この文字マップを使用するロケールで実行する必要があります。
一部sed
の実装では、入力をデコードできないというエラーによって失敗する可能性があります。
²あなたが言及したAcerは、この文字セットを発明した5大企業の1つです。