使用sed替换括号内的“,”
我想用空格替换括号内的逗号(同时删除括号)。我使用了使用sed替换括号内的“,”,sed,Sed,我想用空格替换括号内的逗号(同时删除括号)。我使用了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=1
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)
是否有任何方法可以使用
sed
执行我想要的操作?请考虑以下测试文件:
$ cat file
[-0.0, 1.23]
[-0.0, 1.23, 4.56]
foo=[12.3, 4.5, 3.0, 4.1], bar=123.0, xyz=6.7
[1,2,-3,4]
要删除方括号内的任何逗号以及删除方括号,请执行以下操作:
$ sed -E ':a; s/(\[[^],]*), */\1 /; ta; s/\[([^]]*)\]/\1/g' file
-0.0 1.23
-0.0 1.23 4.56
foo=12.3 4.5 3.0 4.1, bar=123.0, xyz=6.7
1 2 -3 4
工作原理
这定义了一个标签:a
a
这将查找方括号内的第一个逗号并将其删除s/(\[[^],]*),*/\1/
匹配除[^],]
或]
之外的任何字符。因此,,
匹配(\[^],]*)
后接任何数量的字符,而不是[
或]
,并将结果存储在组1中,
如果上述替换导致更改,请跳回标签ta
,以便我们可以再次尝试替换a
删除完逗号后,将删除方括号 请注意,s/\[([^]]*)\]/\1/g
匹配任何不是[^]]
的字符。因此,]
匹配一个\[([^]]*)\]
后接任何数字的字符,除了[
后接]
。换句话说,它匹配一个括号内的表达式,表达式的内容(不包括方括号)存储在组1中]
echo“[1,2,3,4]”中似乎失败了| sed-E:a;s/(\[^],]*),/\1/;助教;s/\[([^]]*)\]/\1/g'
。这将返回1,2,3,4
(包括逗号)@kvantour,这是真的。OP的所有示例和代码都是逗号空白。所以,这也是我的代码所需要的。当然,您的示例在逗号后没有空格。如果要使空格成为可选的,请使用:sed-E':a;s/(\[^],]*),*/\1/;助教;s/\[([^]]*)\]/\1/g'
True。。。但在这种格式中,空格可以替换为减号。此空间通常是标志的位置。@kvantour OK。如果你想让空的选项,添加星:<代码> SED-E:A;s/(\[^],]*),*/\1/;助教;s/\[([^]]*)\]/\1/g'我知道,我只是表示这可能是一个小的更正。您甚至可以将其替换为[-]
。