2016-03-23 6 views
1

私は、1300以上の単語で構成されたマルチラインの非常に長い文字列を持っています。Bashプログラミングクイック検索と抽出方法

EDIT:文字列から大まかに2つの値を検索して抽出し、書式設定と追加処理のための変数に格納したいと考えています。

私は配列とループラインに文字列をオンにし、私は私もちょうどで文字列を検索することができます知っている

while read -r line; do 
      arr+=("$line") 
    done <<< "$ACSCH" 

    for i in "${arr[@]}" 
    do 
      if [[ "$i" =~ "level 1: src="(.*)$ ]]; then 
        SRC=${BASH_REMATCH[1]} 
      fi 
      if [[ "$i" =~ "level 1: dst="(.*)$ ]]; then 
        DST=${BASH_REMATCH[1]} 
      fi 
    done 

で各行を検索することができます。

if [[ "$ACSCH" =~ "src="([[:alnum:]]*) ]]; then 
    SRC=${BASH_REMATCH[1]} 
fi 

が、私はいけません追加の変数を検索する方法を知っている

私が考えることができる唯一の方法は、文字列全体を検索する場合に別の方法を入れることです

if [[ "$ACSCH" =~ "DST="([[:alnum:]]*) ]]; then 
    DST=${BASH_REMATCH[1]} 
fi 

これは正しい方法ですか、それとも良い方法ですか?

どの方法で高速になりますか。私の変数、私の他の方法、または私がまだ知らない別の方法について各行を検索し、それが私がここで助けを探している理由です。

** EDIT: サンプルINPUT:SRC = 19r4345e3e未知の長さのテキスト

サンプル出力のDSTの間= 1kje3dkj35残りの部分でいくつかの他のテキスト........:SRC = 19r4345e3e | DST = 1kje3dkj35

その後、私はさらに私のSRCとDST変数を処理することができます。**

ありがとう! --E

+0

サンプル入力とそのサンプル入力の希望出力を質問に追加してください。 – Cyrus

+0

大きなテキスト変数であるので、私はsmaple入力を追加したくありません。私は – eherr9633

答えて

1

あなたは、文字列「単語1」、「WORD2」を見つけたい、あなたが使用できる「スペースとワード3と文字列」と「WORD4」、:

echo "$ACSCH" | grep -Eo "word1|word2|string with spaces and word3|word4" 

あなたはより多くを持っています探している単語は、grepオプション-fを考えてみてください。

+0

より上のサンプル出力を提供しました。それは私を助けません - 私は信じています - シェルにエコーするだけでなく、変数に戻りパターンを保存できるようにしたいと思います – eherr9633

+0

そしてあなたはvarsで何をしますか? 配列に割り当てたり、 '-r行を読みながら'を使ったり、各行を 'printf var $ i"%s "" $ {line} "でvarに割り当てることができます。 ((i ++)) ' –

関連する問題