使用sed替换括号中的`,`

时间:2019-04-03 05:45:47

标签: sed

我想将方括号内的逗号替换为空格(并删除方括号)。我使用了RecyclerView.ViewHolder,但是我能想到的解决方案取决于列表中的元素。

sed

sed 's/\[\(.*\), \(.*\)\]/\1 \2/g' # [-0.0, 1.23] => -0.0 1.23 (works) # [-0.0, 1.23, 4.56] => -0.0, 1.23 4.56 (doesn't work) # foo=[12.3, 4.5, 3.0, 4.1], bar=123.0, xyz=6.7 => foo=12.3, 4.5, 3.0 4.1, bar=123.0, xyz=6.7` (doesn't work, expected: foo=12.3 4.5 3.0 4.1, bar=123.0, xyz=6.7) 有什么方法可以用来做我想做的事吗?

1 个答案:

答案 0 :(得分:3)

考虑此测试文件:

:a

要删除方括号内的所有逗号,也要删除方括号:

a

工作原理

  • s/(\[[^],]*), */\1 /

    这定义了标签[^],]

  • ]

    这会查找方括号内的第一个逗号并将其删除。

    ,(\[[^],]*)[以外的任何字符匹配。因此,]匹配,,后跟任意数量的非taa字符,并将结果存储在组1中。

  • s/\[([^]]*)\]/\1/g

    如果上述替换导致更改,请跳回到标签[^]],以便我们可以再次尝试替换。

  • ]

    删除逗号后,这将删除方括号。

    请注意,\[([^]]*)\]不是 [的任何字符匹配。因此]]匹配,后跟if (validateRejectionCategory(rejectionData[0])) { ...... } 以外的任意数量的任何字符,后跟REJECTION_CATEOGRY_POSITION。换句话说,它匹配一个括号内的表达式,表达式的内容(不包括方括号)存储在组1中。