sedは、左側にゼロで埋められた数字のすべての項目を組み込みのマイナス記号「-」に置き換えて、マイナス記号が左側になるようにします。

sedは、左側にゼロで埋められた数字のすべての項目を組み込みのマイナス記号「-」に置き換えて、マイナス記号が左側になるようにします。

タブ区切りの入力ファイルがあります。一部の数値フィールド値には、値の中央にマイナス記号があります(例:)000-45.123。私は-次のように左側にする必要があります: -00045.123

したがって、タブで区切られた入力ファイルに次のものが含まれている場合:(スペースはタブです)

ABC 000-45.123 0-765.43 DEF 00-54 XYZ

だから私が望む結果は

ABC -00045.123 -0765.43 DEF -0054 XYZ

"-"を含むすべての数値は1つ以上のゼロで始まり、他の文字はありません。

注:利用可能なオプションはありません:sed -rまたはsed -E

答え1

GNU sedの使用:

数字とマイナス記号からマイナス記号と数字に順序を変更します。

sed -r 's/([0-9]+)(-)/\2\1/g' file

出力:

ABC -00045.123 -0765.43 DEF -0054 XYZ

望むより:スタックオーバーフロー正規表現に関するよくある質問

答え2

POSIX的に:

TAB=$(printf '\t')
sed "s/^\(00*\)-/-\1/;s/${TAB}\(00*\)-/$TAB-\1/g"

00-最初のフィールド(行の先頭)または他のフィールド(00-TABの後ろ)の2つのケースを考慮する必要があります。

sed実装サポート-E(拡張正規表現用)およびシェルサポート$'...'(すべてPOSIX仕様の将来のバージョンになる可能性が高い)を使用すると、これを次のように簡素化できます。

sed -E $'s/(^|\t)(0+)-/\1-\2/g'

代わりに。

関連情報