簡體   English   中英

如何在bash grep中使用變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM