使用脚本语言在bash中使用字符串的子串

时间:2016-03-01 09:57:28

标签: bash shell

我们如何使用脚本语言从bash中的字符串中获取子字符串?

示例:

fullstring="mnuLOCNMOD.URL = javascript:parent.doC...something"

我想要的子字符串是完整字符串中“.URL”之前的所有内容。

6 个答案:

答案 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以找出oP标志代表的内容。

答案 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")"