我正在尝试在 groovy 文件中使用
sed
,该文件由 Jenkinsfile 执行
我的代码是:
sh script: """
sed -i '' "s/search/substitute/g" "path/to/file"
"""
目的是更改文件中的
search
元素 path/to/file
对于
substitute
.我可以确认 sed 代码,如果在终端中手动执行可以正常工作。
但是我收到以下错误:
sed: can't read s/search/substitute/g: No such file or directory
我尝试颠倒搜索和路径参数的顺序,但没有成功。
当我收到该错误时,
s/search/substitute/g
周围的引号不会出现,但是
我尝试过
's/search/substitute/g'
、"s/search/substitute/g"
、\"s/search/substitute/g\"
和 \'s/search/substitute/g\'
遇到相同的错误。
我做错了什么?
显然您的
sed
版本不需要 -i
选项的参数。因此 ''
被解释为您的脚本,s/search/substitute/g
被解释为要处理的文件的名称。
通常,BSD(以及 Mac)
sed
需要 -i
的参数,而 Linux 则不需要。
如果您想创建一个不受平台影响的脚本,可以在
-i
之后直接传递一个非空参数,例如 -i~
。 (可能要小心删除它之后创建的文件。如果不明显,这会告诉 sed
保存原始输入文件,并在其名称后添加波形符。)