空间使用shell变量干扰sed替换

时间:2016-07-25 10:19:55

标签: shell sed

我在shell脚本中使用sed用一个存储在shell变量中的句子替换文件中的单词。该句子包含空格和不同的字符。

例如:

sentence="new number is > than 2.5 and < than 3.8"
sed "s|word|$sentence|g" -i Example_file.txt

文件中的行:

tile = "word - Final plot"

预期结果:

title = "new number is > than 2.5 and < than 3.8 - Final plot"

获得结果:

title = "new - Final plot"

正如您在上面所看到的,问题是sed总是只用句子的第一个单词替换“单词”,它在空格处停止。我尝试了命令的不同变体:

sed 's|word|'"$sentence"'|g' -i Example_file.txt
sed "s|word|${sentence}|g" -i Example_file.txt

这些似乎都不起作用。要检查空格是否确实是问题,我将其替换为"_",当我这样做时,sed将替换为整个句子。

任何人都知道如何强制sed接受空格并使用整个句子?

1 个答案:

答案 0 :(得分:0)

尝试此操作,根据您的问题解决我的问题,告诉我们您目前正在做的事情:

文件1:

#!/bin/sh
sed 's/\<word\>/'"$1"'/' abc.txt

file2的:

#!/bin/sh
sentence="new number is > than 2.5 and < than 3.8"
./file1 "$sentence"

Google&#34;引用您的shell变量&#34;。上面假设你有GNU sed用于单词边界\<...\>。如果你没有摆脱它们以确定它是否有效,那么我们可以谈谈你如何满足其他seds中对它们的需求。