我们如何使用脚本语言从bash中的字符串中获取子字符串?
示例:
fullstring="mnuLOCNMOD.URL = javascript:parent.doC...something"
我想要的子字符串是完整字符串中“.URL”之前的所有内容。
答案 0 :(得分:5)
使用Parameter Expansion,您可以执行以下操作:
fullstring="mnuLOCNMOD.URL = javascript:parent.doC...something"
echo ${fullstring%\.URL*}
打印:
mnuLOCNMOD
答案 1 :(得分:1)
$ fullstring="mnuLOCNMOD.URL = javascript:parent.doC...something"
$ sed -r 's/^(.*)\.URL.*$/\1/g' <<< "$fullstring"
mnuLOCNMOD
$
答案 2 :(得分:0)
您可以使用grep
:
echo "mnuLOCNMOD.URL = javas" | grep -oP '\w+(?=\.URL)'
并将结果分配给字符串。我使用了一个正向前瞻(?=regex
),因为它是一个零长度断言,意味着它将匹配但不会显示。
运行grep --help
以找出o
和P
标志代表的内容。
答案 3 :(得分:0)
======
Query:-
======
require_once(MONGODBPATH);
$mdb = mongoConnection::getMongoConnection();
$col2 = $mdb->selectDB("DB")->selectCollection("col2");
$ops = array(
array(
'$project' => array(
"_id" => 1,
"test_model" => 1,
)
),
array('$unwind' => '$test_model'),
array(
'$lookup' => array(
'from'=>'col1',
'localField'=> "test_model.model_id",
'foreignField' => "_id",
'as'=> "result_foreignField"
)
),
);
$results = $col2->aggregate($ops);
=========
Output:-
=========
Array
(
[waitedMS] => 0
[result] => Array
(
[0] => Array
(
[_id] => 1
[test_model] => Array
(
[model_id] => 1
[model_name] => A
)
[result_foreignField] => Array
(
[0] => Array
(
[_id] => 1
[model_status] => A
)
)
)
)
[ok] => 1
)
这里我使用dot作为分隔符 这适用于.sh文件
答案 4 :(得分:0)
Parameter Expansion是要走的路。
如果您对简单的grep
:
% fullstring="mnuLOCNMOD.URL = javascript:parent.doC...something"
% grep -o '^[^.]*' <<<"$fullstring"
mnuLOCNMOD
答案 5 :(得分:0)
提供另一种选择:Bash的正则表达式匹配运算符=~
:
fullstring="mnuLOCNMOD.URL = javascript:parent.doC...something"
echo "$([[ $fullstring =~ ^(.*)'.URL' ]] && echo "${BASH_REMATCH[1]}")"
注意如何通过特殊(.*)
数组变量的元素1
报告(唯一的)捕获组("${BASH_REMATCH[@]}"
)。
虽然在这种情况下l3x's parameter expansion solution更简单,但=~
通常会提供更大的灵活性。
awk
也提供了一个简单的解决方案:
echo "$(awk -F'\\.URL' '{ print $1 }' <<<"$fullstring")"