タブ区切りの入力ファイルがあります。一部の数値フィールド値には、値の中央にマイナス記号があります(例:)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'
代わりに。