在 groovy 函数中使用 sed 正则表达式时出现错误意外字符:“\”或意外的令牌

Error unexpected char: '\' or unexpected token when using sed regex in groovy function

提问人:komito 提问时间:8/25/2023 最后编辑:komito 更新时间:8/25/2023 访问量:71

问:

我有一个 sed 正则表达式,可以解析当前和子目录中的所有 dockerfile,并将我的注册表添加到映像名称中(如果它不存在)。我需要将其添加到 jenkinsfile 中调用的 grooves 函数中。添加时,我得到:意外的令牌或意外的字符错误。尽管在 Linux 控制台中,该表达式运行良好。 我的正则表达式:

for d in `find . -name '*Dockerfile*'`; do 
sed -i -e '/^FROM my[.]own[.]registy[.]org/{p;d}' -e 's/^FROM /FROM my.own.registy.org\//' $d; 
done

试图将它集成到时髦中。 通过 shell:

def call (Here is a function that downloads dockerfiles from the repository)
    ---
    ---
    sh "for d in `find . -name '*Dockerfile*'`; do sed -i -e '/^FROM my[.]own[.]registy[.]org/{p;d}' -e 's/^FROM /FROM my.own.registy.org\//' $d; done"

我收到一个错误(my.own.registy.org 后有一个指向转义字符的指针):

意外令牌:用于 @ 第 38 行,第 22 列。def sedCommand = 用于 d in ;do sed -i -e '/^FROM my[.]自己的[.]注册[.]org/{p;d}' -e 's/^FROM /FROM my.own.registy.org\//' $d;做find . -name '*Dockerfile*'

如果我尝试使用一个函数:

def call (Here is a function that downloads dockerfiles from the repository)
    ---
    ---
    def sedCommand = for d in `find . -name '*Dockerfile*'`; do sed -i -e '/^FROM my[.]own[.]registy[.]org/{p;d}' -e 's/^FROM /FROM my.own.registy.org\//' $d; done

然后我得到一个错误(带有指向最后一个 appostrophe 的指针): 意外令牌:用于 @ 第 38 行,第 22 列。def sedCommand = 用于 d in ;do sed -i -e '/^FROM my[.]自己的[.]注册[.]org/{p;d}' -e 's/^FROM /FROM my.own.registy.org\//' $d;做find . -name '*Dockerfile*'

我该如何解决这个问题? 或者我怎样才能对凹槽做同样的正则表达式?不幸的是,我不太了解时髦

Linux Jenkins Groovy SED

评论

2赞 tim_yates 8/25/2023
为什么不直接使用 groovy 来做到这一点,而不是分叉 sed 进程呢?
0赞 komito 8/25/2023
不幸的是,我不太了解时髦
0赞 cfrick 8/25/2023
这是什么 - 这是给詹金斯的吗?然后你应该相应地标记它sh
0赞 komito 8/25/2023
是的,这是给詹金斯的。新增信息
0赞 komito 8/25/2023
找到了解决方案。已使用 SED 的替代分隔符 |

答: 暂无答案