除非是多个字词,否则如何在连字符和下一个字符之间放置空格?

时间:2019-05-23 14:18:05

标签: regex awk sed

我有一个文本,其中包含multi-words和类似对话框的短语,例如-hello,并且我只想在连词不属于多词的情况下将连字符与单词分开,这意味着连字符不是被两个字符包围。

该单词可能出现在句子中的任何地方,而不仅仅是开头。 示例:

输入:

multi-media
-hello -oh, hi

所需的输出:

multi-media
- hello - oh, hi

这可以使用sedawk完成吗?

2 个答案:

答案 0 :(得分:2)

您可以使用sed进行以下操作:

sed -E 's/(^|[^[:alnum:]])-/& /g' yourInputFile

正则表达式(^|[^[:alnum:]])-会在行首(-)或不属于单词(^ = 不是字母或数字,例如空格或逗号。

替换字符串[^[:alnum:]]告诉&␣在我们匹配的内容(sed)之后添加一个空格。

答案 1 :(得分:0)

易于使用Vim:

:%s/\(^\|\s\)-/\0 /g