shell:如何用包含空格的新字符串替换字符串



我有一个文本文件,内容如下:

hello my name 
is teddy bear, 
I like 
eating sweet honey!

我想用shell脚本替换is teddy bearis sleepy bear行。

我正在尝试以下代码:

#!/bin/sh
ORI_LINE="is[[:space:]]teddy[[:space:]]bear"
NEW_LINE="is[[:space:]]sleepy[[:space:]]bear"
eval sed -i -e 's/$ORI_LINE/$NEW_LINE/g' ./hello.txt

但是最后我得到

hello my name 
is[[:space:]]sleepy[[:space:]]bear, 
I like 
eating sweet honey!

,其中[[:space:]]未被解析为实空间。

我想继续使用变量ORI_LINENEW_LINE,而不是使用sed命令的内联字符串。

谢谢!

你让它把那个图案放进去。替换字符串应该具有实际的空格,而不是可以匹配各种类型的"空格"的正则表达式模式。字符。

,如果

$: txt="hello my name is teddy bear,
I like eating sweet honey!"
$: ORI_LINE="is[[:space:]]teddy[[:space:]]bear"
$: NEW_LINE="is sleepy bear"
然后

$: sed "s/$ORI_LINE/$NEW_LINE/g" <<< "$txt"
hello my name is sleepy bear,
I like eating sweet honey!