【发布时间】:2017-03-15 09:31:48
【问题描述】:
我正在尝试隐藏这个的输入文件内容:
NP_418770.2: 257-296 344-415 503-543 556-592 642-707
YP_026226.4: 741-779 811-890 896-979 1043-1077
到这里:
NP_418770.2: 257-296, 344-415, 503-543, 556-592, 642-707
YP_026226.4: 741-779, 811-890, 896-979, 1043-1077
即用逗号和空格替换空格(不包括换行符)
为此,我已经尝试过:
perl -pi.bak -e "s/[^\S\n]+/, /g" input.txt
但它给出了:
NP_418770.2:, 257-296, 344-415, 503-543, 556-592, 642-707
YP_026226.4:, 741-779, 811-890, 896-979, 1043-1077
如何在不编写另一个正则表达式的情况下停止出现在“:”之后的附加逗号(我想要“:”和一个空格)?
谢谢
【问题讨论】:
-
/42/怎么样? -
(对于那些感到困惑的人,最初的问题标题是“什么是完美的正则表达式?”抱歉@simbabque 破坏了你的笑话)。
-
不是直接的答案,但对于这个用例,
s/(\d) (\d)/$1, $2/g怎么样? -
您是否有任何其他类型的空间,如制表符或在某些条件下需要替换的单个空格?这样您就可以只使用文字空格字符而不必担心
\S \h \n等... -
我最喜欢替换除某些模式之外的所有模式是使用SKIP....尽管在这种情况下使用
s/^[^:]+:\h+(*SKIP)(*F)|\h+/, /g似乎没有必要使用简单的替代方法