2017-07-19 14 views
0

私はハードウェアタスクを自動化しています。私が使用しているツールの1つは、接続するシリアルデバイスのリストを出力します。フォーマットは以下の通りである:キーワードw/Bashに基づいて文字列内の要素を抽出する

利用可能なデバイス(A)は/ dev /スタッフ

利用可能なデバイス(B)は/ dev /スイカ

利用可能なデバイス(C):の/ dev /スタッフ

"スイカ"が発生する行を見つけて、かっこ内の文字を抽出する必要があります。この場合、それは "b"になります。しかし、注文は保存されているとは限りません(そのため、私は「スイカ」で検索しなければなりません)。

答えて

0

sedの逆参照で非常に簡単に行うことができます。

  • sed -n
  • /watermalon/
  • s/find/replace/をスイカでラインを一致させる、ラインの正常な印刷を抑制

    $ sed -n '/watermelon/s/^[^(]*(\([^)]*\).*$/\1/p' file 
    b 
    

    - 通常の代替オプションを

    • にあるもの^[^(]*(\([^)]*\).*$を見つけます控えめにして第1の参照として保存する
    • 結果を印刷
  • p最初の指示対象として保存されたもので\1を交換してください。

あなたは、例えば、あなたがサブストリング除去で[[ ]]=~オペレータとパラメータ展開でそれを行うことができ、bashのを使用する必要がある場合

while read -r line; do 
    [[ $line =~ watermelon ]] && { tmp="${line#*\(}"; echo "${tmp%)*}"; } 
done < file 

出力

b 
関連する問題