Bash 需要使用grep提取logglyKey的帮助吗

Bash 需要使用grep提取logglyKey的帮助吗,bash,grep,Bash,Grep,我正在开发一个shell脚本,它将替换environment.ts文件中的logglyKey // environment.ts { production: true, logglyKey: 'asdfasfd-asdfsd-asdfs-asdfsdf-asdfasfd' } 我想用bitbucket管道中的环境变量替换构建过程中的logglyKey。我怎样才能做到这一点 我试过了,但它不能正确提取logglyKey // addLogglyKey.sh #!/bin/bash

我正在开发一个shell脚本,它将替换environment.ts文件中的logglyKey

// environment.ts
{
    production: true,
    logglyKey: 'asdfasfd-asdfsd-asdfs-asdfsdf-asdfasfd'
}
我想用bitbucket管道中的环境变量替换构建过程中的logglyKey。我怎样才能做到这一点

我试过了,但它不能正确提取logglyKey

// addLogglyKey.sh
#!/bin/bash

export LOGGLY_KEY=$(grep -oP "'logglyKey'\s*:\s*'([A-Za-z0-9-])'" ./src/environments/environment.ts)
echo "Previous logglyKey was : ${LOGGLY_KEY}"
但这打印的是空的logglyKey

Previous logglyKey was : 

修复正则表达式将返回grep的结果,但这可能不是您所期望的结果

grep -oP "logglyKey\s*:\s*'([A-Za-z0-9-]+)'" test.txt
结果:

logglyKey: 'asdfasfd-asdfsd-asdfs-asdfsdf-asdfasfd'
试图设置Perl regexp支持的非捕获组也不起作用

grep -oP "^(?:\s*logglyKey\s*:\s*')([A-Za-z0-9-]+)'\s*$" test.txt
logglyKey: 'asdfasfd-asdfsd-asdfs-asdfsdf-asdfasfd'
可以使用sed完成


保持简单,只需使用awk:

$ awk -v new='fluffy-bunny' 'BEGIN{FS=OFS="\047"} /logglyKey:/{$2=new} 1' file
// environment.ts
{
    production: true,
    logglyKey: 'fluffy-bunny'
}

grep只用于在文件中查找regexp并打印匹配行g/re/p-明白吗?不用于修改文件,而且sed不理解字符串文字,因此如果您试图将其用于任何可能包含字母数字字符以外的数据,您将很快陷入逃过/引用地狱的境地,请参见。

Key logglyKey在您的示例中不被引用,而是在模式“logglyKey”中被引用。我得到sed:-e表达式1,char 84:sed-i s/${LOGGLY_KEY}/${VERSION}//environments/environment.*这里,我想编辑environments目录中的两个文件,environment.ts和environment.prod.ts文件。你能告诉我出了什么问题吗?打印sed模式以检查出了什么问题echo s/${LOGGLY_KEY}/${VERSION}/。不,我找不到任何信息。事实上,该命令可以在单个文件上运行,比如environment.ts文件,但在environments目录中,我有两个目录environment.ts和environment.prod.ts。可能是这导致了它的崩溃。我已经把代码包括在这里了/bin/bash export LOGGLY_KEY=$grep-oP logglyKey:'[\\w-]+'环境/环境。*echo先前的logglyKey was:${LOGGLY_KEY}export VERSION=$echo logglyKey:'${NEW LOGGLY}echo新版本号:${VERSION}sed-i s/${LOGGLY_KEY}/${VERSION}/environments/environment*
$ awk -v new='fluffy-bunny' 'BEGIN{FS=OFS="\047"} /logglyKey:/{$2=new} 1' file
// environment.ts
{
    production: true,
    logglyKey: 'fluffy-bunny'
}