我有一句话:db.COLLECTION_NAME.insert(document)
我需要提取db.
和.insert
之间的任何内容,例如COLLECTION_NAME
。
此示例中的()
document
之间的任何内容。
我试过了:
document="${cmd#db*insert(}"
用于document
,但它会获得document)
,如果文档包含特殊字符,则会崩溃
有什么建议吗?
答案 0 :(得分:3)
$ echo "db.COLLECTION_NAME.insert(document)" | awk -F'[.()]' '{print $2,$4}'
将给出
COLLECTION_NAME document
您可以使用read
read a b < <(echo "db.COLLECTION_NAME.insert(document)" | awk -F'[.()]' '{print $2,$4}');
答案 1 :(得分:2)
我猜你可以分两步使用大括号扩展来做到这一点:
str='db.COLLECTION_NAME.insert(document)'
temp=${str/db./}
str=${temp/.insert*/}
echo $str
COLLECTION_NAME
答案 2 :(得分:2)
#!/bin/bash
# set x to a "typical" input value
x='db.COLLECTION_NAME.insert(document)'
# print it out, just so you see it
echo "x == ${x}"
if [[ "${x}" =~ ^db\.(.*)\.insert.* ]]; then
# we have a match
ans="${BASH_REMATCH[1]}"
# print the substring that matches the pattern
echo "answer == ${ans}"
else
# sorry no match
echo "no match"
fi
答案 3 :(得分:1)
以下是使用BASH匹配运算符的替代方法:
regex='db[.](.*)[.]insert.*'
str='db.COLLECTION_NAME.insert(document)'
if [[ $str =~ $regex ]]; then
result=${BASH_REMATCH[1]}
fi
echo $result
COLLECTION_NAME