私はパターンを見つけて交換するために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
。