使用 sed 替换包含空格的字符串

使用 sed 替换包含空格的字符串

我需要替换多个文件中的一行,并且一直在使用 sed 寻求解决方案。我遇到这个错误:

sed:-e 表达式 #1,字符 31:未终止的“s”命令

当尝试运行包含以下行的 bash 脚本时:

sed -i.bak "s/some-text-string/some-text-string ${stringVar}/" *.ext

我知道这是可能导致此问题的空白,但我无法在任何地方找到解决方案。我需要保留替换中的空格。我已经考虑过附加字符串,但使用其他函数也未能取得很大进展。

我可能错误地处理了这个问题,觉得我应该使用不同的函数,但是我没有大量的 sed 或 bash 经验,并且遇到了困难。

如果有人能够阐明可能的解决方案,我们将不胜感激。

答案1

空格或制表符应该不会引起问题,但换行符可能会破坏 sed 命令。问题是 shell 变量不是您从其他编程语言中可能知道的真正变量,它们更类似于宏。

切换到具有真实变量的真实编程语言可以解决这个问题。例如,为了保持语法相似,Perl 解决方案:

r=$stringVar perl -i.bak -pe 's/some-text-string/some-text-string$ENV{r}/' -- *.ext

通过预先给命令赋值,变量就成为命令运行环境的一部分。

相关内容