Groovy管道中的sed命令

问题描述 投票:0回答:2

我正在Alfred管道的groovy脚本中使用sed命令。

以下是我尝试执行的sed命令,但出现错误意外令牌'('

sh "echo \"sed -i s/LOBCODE IN ([^)]*/LOBCODE IN (${CCLobcode}/ig /bidata/testing/dma_if/sqlfile_if/incoming/${listvalue}_${database}/*.sql\" >> ./ssh_dma_script"

我基本上是用用户定义的($ ccLOBCODE)值替换任何密码为LOBCODE的东西。

并松开右括号。 ( ^) )

for ex : LOBCODE in (1002,1003,1009) will get replaced by LOBCODE in (1007). (assuming 1007 is going to be value passed in **ccLOBCODE)

感谢您的输入。

sed jenkins-pipeline
2个回答
0
投票
执行REGEXP进行sed时,最好将REGEXP括在引号中,因为REGEXP中使用的许多特殊字符对shell都有特殊含义。安全的是单引号。

在这种情况下,RE具有动态部分($ CCLobcode,在问题中也拼写为ccLOBCODE),这将需要转义,否则它将不会被运行时值替换。

还请注意,REGEXO已被修改以替换括号后的所有字符,直到')',而不仅仅是第一个:([^)*]

sh "echo \"sed -i \"s/LOBCODE IN ([^)*]/LOBCODE IN (${CCLobcode}/ig\" /bidata/testing/dma_if/sqlfile_if/incoming/${listvalue}_${database}/.sql\" >> ./ssh_dma_script"


0
投票
恐怕我找不到以杂乱的方式说的任何务实的好处:

sh "echo \"sed ..."

而不是:

echo "sed ..."

此外,如果没有sh string选项,-c将不起作用。

请您尝试以下操作:

echo "sed -i 's/LOBCODE IN ([^)]*/LOBCODE IN (${CCLobcode}/ig' '/bidata/testing/dma_if/sqlfile_if/incoming/${listvalue}_${database}/'*.sql" >> ./ssh_dma_script

请记住引用sed命令。
© www.soinside.com 2019 - 2024. All rights reserved.