我有几行这样的内容作为文件的一部分
plot.margin
我要提取字符串 'abcd','efgh','hijk','lmno'
如何提取它们?到目前为止,这是我尝试过的:-
the jdbc:mondrian:DataSource=abcd_datasource
the jdbc:mondrian:DataSource=efgh_datasource
the jdbc:mondrian:DataSource=hijk_datasource
the jdbc:mondrian:DataSource=lmno_datasource
谢谢
答案 0 :(得分:1)
使用GNU grep
,您可以这样做:
grep -ioP 'DataSource=\K[a-z\d]+' file
abcd
efgh
hijk
lmno
如果您没有GNU grep
,请使用以下sed
:
sed 's/.*DataSource=\([a-zA-Z0-9]*\).*/\1/' file
答案 1 :(得分:1)
#!/usr/bin/env bash
logFileName=$1
datasource_re='jdbc:mondrian:DataSource=([[:alnum:]]+)_datasource'
while read -r errorLogLine; do
if [[ "$errorLogLine" =~ $datasource_re ]]; then
echo "Found source: ${BASH_REMATCH[1]}"
fi
done < <(grep -i "_datasource" "$logFileName")
注意:
[[ "$var" =~ $regex ]]
中的引号和空格非常有意思。
for
array=( $(...) )
格式不正确。答案 2 :(得分:0)
您还可以按如下所示使用简单的awk单行代码:
awk 'BEGIN{FS="DataSource=|_datasource"}{print $2}' file
输出:
abcd
efgh
hijk
lmno
希望有帮助!