我在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)
感谢您的投入。
答案 0 :(得分: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"
答案 1 :(得分: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
命令。