sedを使用して特定のパターンを置き換え、同じ行に例外を追加する方法は?

sedを使用して特定のパターンを置き換え、同じ行に例外を追加する方法は?

私はパターンを見つけて交換するためにsedを使用しています。

私のパターンは「-」

私は次のデータを持っています

>1-2-3-4-5 29238232382083e-9  
>1-2-3-4-5    29238232382083e-9   
>1-2-3-4-5    29238232382083e-9   
>1-2-3-4-5    29238232382083e-9     

1*2*3*4*5を得るために、1-2-3-4-5の「-」を「*」に変更したいと思います。


しかし、 sed -i -e '/-/*/g に置き換えると

すべての「-」が影響を受けます。 29238232382083e-9の29238232382083e*9も同様です。

この例では、29238232382083e-9など、「e」の後にある「-」を除くすべての「-」を置き換えるにはどうすればよいですか?

ベストアンサー1

sed 's/\([^e]\)-/\1*/g' /path/to/input

その声明を詳しく説明するには、次の手順を実行しますsed

  • \([^e]\)-eここでは、ハイフンが続く文字を除くすべての文字を見つけるためにグループ化を使用します。
  • \1*- ここでは、見つかった内容をそのグループに含まれる項目(たとえば、ハイフンの前のe以外の文字)に置き換え、ハイフンを置き換えるアスタリスクを表示します。

ハイフンを行の最初の文字として使用すると機能しません。これには特別なケースを追加する必要があります。

sed 's/\([^e]\)-/\1*/g;s/^-/*/' /path/to/input

これは似ていますが、行の最初の文字のハイフンをアスタリスクに置き換えます。最初の文字なので、前には来ませんe

おすすめ記事