包含多个要更新的单词的 sed 模式

包含多个要更新的单词的 sed 模式

我想做这样的事情,但我不知道该怎么做。

我想将 exports.version = '2.0.0' 更新为新值 exports.version = '2.0.1'

使用:

sed -i '.bak' 's/'2.0.0'/'2.0.1'/g' phantomjs.js

但这可能会导致问题,因为我有 2.0.0 的其他东西

sed -i '.bak' 's/exports.version = '2.0.0'/exports.version = '2.0.1'/g' phantomjs.js

简而言之,如何向 sed 提供 exports.version = '2.0.0' 模式

uname -a

15.0.0 Darwin 内核版本 15.0.0:2015 年 9 月 19 日星期六 15:53:46 PDT;root:xnu-3247.10.11~1/RELEASE_X86_64 x86_64

谢谢,

大号

答案1

尝试这个:

sed -i '.bak' "s/exports\.version = '2\.0\.0'/exports.version = '2.0.1'/g" phantomjs.js

答案2

您尝试将单引号放在单引号字符串内。如果这样做,您需要像这样输入它们:

$ sed -i .bak 's/exports.version = '\''2.0.0'\''/exports.version = '\''2.0.1'\''/g' phantomjs.js

无法直接将单引号放在单引号字符串内。在上面的代码中,之所以'\''有效,是因为第一个单引号结束了前面的单引号字符串,然后\'将转义的单引号放在命令行上,接下来的单引号'开始一个新的单引号字符串。

在您的特定情况下,您还可以使用双引号字符串:

sed -i .bak "s/exports.version = '2.0.0'/exports.version = '2.0.1'/g" phantomjs.js

这很方便,因为可以将单引号放在双引号字符串中而无需任何转义。但这很棘手,因为您必须确保字符串中没有 shell 活动字符。在本例中,没有,所以它恰好是安全的。

相关内容