我正在开发一个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 :
答案 0 :(得分:1)
修复正则表达式将返回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
sed -nre "s/^\s*logglyKey\s*:\s*'([A-Za-z0-9-]+)'$/\1/p" test.txt
asdfasfd-asdfsd-asdfs-asdfsdf-asdfasfd
答案 1 :(得分:0)
保持简单,只需使用awk:
$ awk -v new='fluffy-bunny' 'BEGIN{FS=OFS="\047"} /logglyKey:/{$2=new} 1' file
// environment.ts
{
production: true,
logglyKey: 'fluffy-bunny'
}
grep只是用于在文件中查找正则表达式并打印匹配行(g/re/p
- 得到它?)而不是用于修改文件,而sed不理解字符串文字,因此您很快就会逃避/如果您尝试将其用于包含除字母数字字符之外的任何数据,请引用地狱,请参阅Is it possible to escape regex metacharacters reliably with sed。