与えられた行の-(マイナス)記号をテキストではなく数字に置き換えるだけです。

与えられた行の-(マイナス)記号をテキストではなく数字に置き換えるだけです。

<;|区切り文字には次のような入力があります。

1-<;|3-Text <;|3.13-<;|0.28-<;|9
0.12-<;|2-Text <;|3.99-<;|4.11-<;|6
0.13-<;|3-Text <;|8.13-<;|3.98-<;|3

私の予想結果は次のとおりです。

-1<;|3-Text <;|-3.13<;|-0.28<;|9 
-0.12<;|2-Text <;|-3.99<;|-4.11<;|6
-0.13<;|3-Text <;|-8.13<;|-3.98<;|3

ここでは、テキストフィールドではなく整数または小数値の前にのみマイナス記号を追加したいと思います。列は固定されておらず、どの順序でも可能です。sedコマンドを使用しようとしましたが、成功しませんでした。この状況で私を助けてください。

答え1

GNU sedの使用:

sed 's/\([[:digit:]]\+\)\(\.[[:digit:]]*\)\{0,1\}-\(\W\)/-\1\2\3/g'

の後に「単語以外」の文字をsed一致させるには、GNUバージョンが必要です。 GNU以外のバージョンを使用してこれをシミュレートできます。-\W[^a-zA-Z0-9_]

-前のパターンにスペースを追加するのではなく、スペースの前にある場合は変更しないでください。

sed 's/\([[:digit:]]\+\)\(\.[[:digit:]]*\)\{0,1\}-\([^a-zA-Z0-9_ ]\)/-\1\2\3/g'

関連情報