![如何替换字符串中的所有字符?](https://linux22.com/image/859639/%E5%A6%82%E4%BD%95%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我有以下字符串
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$