Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在不接触多个空间的情况下使用sed替换单个空间_Shell_Sed - Fatal编程技术网

Shell 在不接触多个空间的情况下使用sed替换单个空间

Shell 在不接触多个空间的情况下使用sed替换单个空间,shell,sed,Shell,Sed,使用sed替换单个空格,而不接触多个空格的序列 我的文件如下所示: Host/Domain Summary: Message Delivery sent cnt bytes defers avg dly max dly host/domain -------- ------- ------- ------- ------- ----------- 937 3293k 0 18.6 s 6.9 m theory.tifr.res.in

使用
sed
替换单个空格,而不接触多个空格的序列

我的文件如下所示:

Host/Domain Summary: Message Delivery
 sent cnt  bytes   defers   avg dly max dly host/domain

 -------- -------  -------  ------- ------- -----------
    937     3293k       0    18.6 s    6.9 m  theory.tifr.res.in

    462     3740k       0     7.3 s    9.5 m  ncra.tifr.res.in

    286     1053k       4    20.4 s    1.3 h  gmail.com
问题:

我只想用逗号替换单个空格,或者不带空格,但不接触其他空格。我用
sed
尝试过,但它直接占用了所有空间,并用逗号替换它们

示例:18.6 s和6.9 m具有单个空间,因此只能用我们在
sed
中给出的值替换,但其他值不能


如何做到这一点?

这似乎是一件有趣的事情,但这应该做到你所说的你想做的:

sed 's/\([^ ]\) \([^ ]\)/\1,\2/g'

用第一个非空白、逗号和第二个非空白替换一个非空白后接一个空白后接另一个非空白。对行中的每一个空格重复。

Jonathan Leffler@非常感谢我不知道我怎么忘了这个……我按照我的要求做了一些小的改变。删除“”,并保持原样。sed的/([^])([^])/\1\2/g'非常感谢
sed-e的/\b\b/,/g'
应该可以做得很好
\b
是单词边界一对注意事项:(1)一些版本的
sed
支持
\b
符号;其他人则没有(GNU
sed
有,并且使用非常广泛)。(2) 用逗号代替单个空格更有意义,如果您想确保将数字(数字)与其单位组合(而不是同时运行两个单词),可以调整字符类(
s/\([0-9\.]\)\([a-zA-Z]\)/\1/2/
等)。