String 使用sed拆分长度不同的字符串(GPS坐标)

String 使用sed拆分长度不同的字符串(GPS坐标),string,sed,String,Sed,我正在尝试将gps坐标拆分为CSV文件中的两个单独字段。当前已合并坐标。以下是几个例子: +40.71427-074.00597/ -42+174/ +33.20984-087.56917/ +39.76-098.5/ +39.76-098.5/ +42.27756-083.74088/ 我正在考虑使用以下方法拆分此文件: sed-r's/-/,-/g' 但是这只适用于包含“--”的字符串,其中一些字符串以--或在中间有A+开头。+/-符号很重要,因为它们决定方向,所以我不能失去它们 如果您有

我正在尝试将gps坐标拆分为CSV文件中的两个单独字段。当前已合并坐标。以下是几个例子:

+40.71427-074.00597/
-42+174/
+33.20984-087.56917/
+39.76-098.5/
+39.76-098.5/
+42.27756-083.74088/
我正在考虑使用以下方法拆分此文件:
sed-r's/-/,-/g'

<>但是这只适用于包含“--”的字符串,其中一些字符串以--或在中间有A+开头。+/-符号很重要,因为它们决定方向,所以我不能失去它们

如果您有任何建议,我们将不胜感激,并感谢您抽出时间

您可以使用

sed -E 's/(.+)([-+])/\1,\2/'  file > newfile # POSIX ERE syntax
sed 's/\(.*\)\([-+]\)/\1,\2/' file > newfile # POSIX BRE syntax

(.+)([-+])
模式匹配并捕获组1中的任何一个或多个字符,然后捕获组2中的
-
+
,然后
\1、\2
替换在组之间插入逗号

使用反括号表达式可以使模式更有效:

's/([^-+]+)([-+])/\1,\2/' # POSIX ERE
's/\([^-+]*\)\([-+]\)/\1,\2/' # POSIX BRE
其中,
[^-+]+
与任何sed匹配除
-
+
以外的一个或多个字符:

$ sed 's:\(.*\)\([+-].*\)/:\1,\2:' file
+40.71427,-074.00597
-42,+174
+33.20984,-087.56917
+39.76,-098.5
+39.76,-098.5
+42.27756,-083.74088
这可能适用于您(GNU-sed):

这将用
,+
,-
替换第二次出现的
+
,-

尝试
sed-E的/(.+)([-+])/\1、\2/'
您的问题,以显示给定输入的预期输出。是否有帮助?如果还有什么不清楚的地方,请告知。
sed 's/[+-]/,&/2' file