替换正则表达式之间的单个空格

时间:2017-08-10 20:56:35

标签: sed

我正在尝试替换两个字母数字字符之间的空格并提出这个:

sed -i -e '/^device/ s/[0-9a-zA-Z]\s[0-9a-zA-Z]/g' file.txt

file.txt如下所示:

device    : Nxx2k PNP@0.6
device    : Pdot3 ICB@2.5

等。我想将冒号右侧的字符串之间的空格替换为下划线_

device    : Nxx2k_PNP@0.6
device    : Pdot3_ICB@2.5

此命令用下划线替换空格和两个周围的字符。我怎样才能让空间被重新定位?谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用捕获组来保留空间周围的字母数字字符:

sed -i -e '/^device/ s/\([0-9a-zA-Z]\) \([0-9a-zA-Z]\)/\1_\2/' file.txt

我使用了空格而不是\s因为你写了替换“空格”, 而不是“空白”。 此外,\s的所有版本都不支持sed,因此它不可移植(不适用于BSD sed)。

最后,我删除了g标志,因为在您的示例中没有必要。 如果在您的实际用例中,您想要在一行上替换多个空格, 当然你应该把它加回来。