如何替换字符串中的所有字符?

如何替换字符串中的所有字符?

我有以下字符串

signaldate signaltime period UwThiSon3dH140__mean UwThiSon3dH140__sigma

我尝试用sed逗号代替空格。

sed 's/ /,/g'
sed 's/[[:space:]]/,/g'

但输出仍然是原始字符串。我该如何替换那个空格?

答案1

有什么问题?

$ echo signaldate signaltime period UwThiSon3dH140__mean UwThiSon3dH140__sigma \
  | sed 's/ /,/g'
signaldate,signaltime,period,UwThiSon3dH140__mean,UwThiSon3dH140__sigma

也许您看到的不是空格,或者是混合空格。请尝试使用\s字符:

$ echo signaldate signaltime period UwThiSon3dH140__mean UwThiSon3dH140__sigma \
  | sed 's/\s/,/g'
signaldate,signaltime,period,UwThiSon3dH140__mean,UwThiSon3dH140__sigma

如果失败了,请按照问题的评论建议进行操作并传递输出,hexdump以便您可以看到真正发生了什么,因为它不是一个空格。


请注意,您也可以使用它tr来替换字符,但如果您无法sed工作,我怀疑这是否能解决您的问题:

$ echo signaldate signaltime period UwThiSon3dH140__mean UwThiSon3dH140__sigma \
  | tr ' ' ','
signaldate,signaltime,period,UwThiSon3dH140__mean,UwThiSon3dH140__sigma

答案2

\s匹配单个空格或制表符。如果输入字符串中有两个空格,则不会匹配。因此最好<space>+在模式中使用。

$ echo 'signaldate signaltime period UwThiSon3dH140__mean UwThiSon3dH140__sigma' | sed 's/ \+/,/g'
signaldate,signaltime,period,UwThiSon3dH140__mean,UwThiSon3dH140__sigma

答案3

您需要comma像这样逃避操作员。

sed 's/ /\,/g'

我在我的 solaris 系统中检查了同样的情况,

  bash-3.2$ echo "signaldate signaltime period UwThiSon3dH140__mean     UwThiSon3dH140__sigma" | sed 's/ /\,/g'
  signaldate,signaltime,period,UwThiSon3dH140__mean,UwThiSon3dH140__sigma
  bash-3.2$ 

相关内容