[英]How to use variables in bash grep?
#!/bin/bash
host=${1-localhost}
port=${2-27017}
dbname=${3-ascq}
MONGOBKDIR=./mongo_data/ascq
echo "restore data from $MONGOBKDIR"
dbs=$(mongo $host:$port --eval 'printjson(db.adminCommand("listDatabases"))' | \
grep -oP '"name" : "${dbname}\d*"' | \
awk '{print $3}' | tr -d '"')
for i in $dbs
do
echo "restoring:$i"
mongorestore -h $host:$port -d $i --drop $MONGOBKDIR/
done
exit 0
我想在grep中使用$ {dbname},但失败了。
您正在使用单引号来防止变量的扩展。
使用双引号:
grep -oP "name : ${dbname}\d*"
如果您还想匹配模式中的引号"
,请转义那些:
grep -oP "\"name\" : \"${dbname}\d*\""
尝试grep -oP '"name" : "'${dbname}'\\d*"'
。
在撇号(单引号)内,不会发生变量扩展。
我假设输入包含要匹配的引号(双引号),例如
"name" : "sales34567"
"name" : "payroll34567"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.