Regex 用sed将数字分成一行

Regex 用sed将数字分成一行,regex,sed,awk,Regex,Sed,Awk,我有一句话: CITY;+41119;-754831 我想把这两个数字除以10000得到这一行: CITY;4.1119;-75.4831 我尝试了下面的sed命令,但它没有任何作用,出了什么问题 sed 's/(.*;.*)([0-9]{4};.*)([0-9]{4})/\1\.\2\.\3/g' 尝试: sed -r ':L;s=\b([0-9]+)([0-9]{4})\b=\1.\2=g;t L' 例如: echo "CITY;+41119;754831" | sed -r ':

我有一句话:

CITY;+41119;-754831
我想把这两个数字除以10000得到这一行:

CITY;4.1119;-75.4831
我尝试了下面的sed命令,但它没有任何作用,出了什么问题

sed 's/(.*;.*)([0-9]{4};.*)([0-9]{4})/\1\.\2\.\3/g'
尝试:

 sed -r ':L;s=\b([0-9]+)([0-9]{4})\b=\1.\2=g;t L'
例如:

echo "CITY;+41119;754831" | sed -r ':L;s=\b([0-9]+)([0-9]{4})\b=\1.\2=g;t L'
输出:

CITY;+4.1119;75.4831

awk
是执行浮点运算的更好工具:

x='CITY;+41119;754831'
awk -F';' -v d=10000 '{print $1,($2/d),($3/d)}' OFS=';' <<< "$x"
CITY;4.1119;75.4831
x=”城市+41119;754831'

awk-F';'-vd=10000'{print$1,($2/d),($3/d)}'OFS=';'如果输入为:
“CITY;+4119;754831”
或除数为
500
,则该怎么办?只需检查即可。;-)输出:
城市+4119;75.4831
我想不需要“+”
,因为它只表示第一个数字的符号。因此,如果它是
-4100
,结果应该是
-4.1
,现在它将打印
+-4.1
@fedorqui:是的,我同意,我想我刚刚匹配了OP的预期输出:P@fedorqui是的,我已经删除了,因为我可以有一些负面的values@Michael当前位置不客气,很高兴它对你有用。(我从输出中删除了额外的+)。这是一个使用
sed
的请求,但它不能很容易地解决这个问题,因此使用
awk
是一个很好的解决方案。这是一个点播版本
awk-F\;'{打印$1,$2/d,$3/d}'OFS=\;d=10000至于有什么问题,我想您的
sed
可能不支持
{4}
重复。尝试使用
\{4\}
,或者只对表达式的四个实例进行硬编码。