需要帮助使用grep提取logglyKey

时间:2018-05-18 20:23:42

标签: bash grep

我正在开发一个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 : 

2 个答案:

答案 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