我正在尝试将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'
,但这仅适用于包含“-”的字符串,其中一些以-开头或中间带有+的字符串。 +/-符号在确定方向时必须保持重要,因此我不能失去它们。
任何建议都将不胜感激,感谢您抽出宝贵的时间!
答案 0 :(得分:3)
这可能对您有用(GNU sed):
sed 's/[+-]/,&/2' file
这用+
或-
替换了,+
或,-
的第二次出现。
答案 1 :(得分:2)
使用任何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
答案 2 :(得分:1)
您可以使用
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
其中[^-+]+
匹配1个或多个除-
和+
以外的字符。