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

时间:2019-04-08 23:05:28

标签: 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'

,但这仅适用于包含“-”的字符串,其中一些以-开头或中间带有+的字符串。 +/-符号在确定方向时必须保持重要,因此我不能失去它们。

任何建议都将不胜感激,感谢您抽出宝贵的时间!

3 个答案:

答案 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

请参见online sed demo

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

您可以使用否定的括号表达式使模式更有效:

's/([^-+]+)([-+])/\1,\2/' # POSIX ERE
's/\([^-+]*\)\([-+]\)/\1,\2/' # POSIX BRE

其中[^-+]+匹配1个或多个除-+以外的字符。