首页 > 解决方案 > 如何替换sed中匹配字符串中所有出现的字符

问题描述

我想替换,匹配字符串中所有出现的字符,例如sed. 匹配的字符串如下所示:

[cite!abc,cde]

我想将其替换为:

[!cite](abc, cde)

替换外部格式的命令是:

sed 's/\[cite\!\([^]]+\)\]/\[\!cite\]\(\1\)/g' file

这使

[!cite](abc,cde)

但是,我想在后面加上空格,,并且可能有任意数字或逗号分隔的条目,例如

[cite!abc,cde,def,fgh]

有没有一种优雅的方法可以做到这一点,sed还是我需要求助于 perl 脚本?

标签: regexsed

解决方案


如果保证输入字符串中逗号后没有空格:

sed 's/,/, /g' file

如果输入字符串中的逗号后确实有空格,则输出中会出现额外的空格。

编辑:

如果某些元素中的逗号后可能有空格,您可以避免添加更多:

sed 's/,\([^ ]\)/, \1/g' file
$ echo '1, 2, 3,4,5,6' | sed -e 's/,\([^ ]\)/, \1/g'
1, 2, 3, 4, 5, 6

推荐阅读