テキストファイルで文字列を見つけ、結果に基づいてスクリプトを実行します。

テキストファイルで文字列を見つけ、結果に基づいてスクリプトを実行します。

次の内容を含むファイル(Data.txt)があります。

A=1234597890 B=192.168.1.1

Bが先に行く場合もあり、AやBだけ行く場合もあります。

だから私が見つけた場合:

  A,    Print A content and execute A script
  B,     "    B    "     "    "     B   "
 A&B,    "   A&B   "     "    "     A   "
Neither, Print a error message

今問題は、AとBの内容が常に異なるということです!

どのコマンドを使用するのが最善かわかりません。

助けてくれてありがとう、私の基本的な英語を理解しようとしてくれてありがとう:)!

ベストアンサー1

Perlでは、次のようにすることができます。

$ perl -lne 'if(/A=([^\s]+)/){print "A : $1"; `scriptA.sh`} 
           if(/B=([^\s]+)/){print "B : $1"; `scriptB.sh`}' Data.txt

説明する

  • -lneprint:各入力行から末尾の改行を削除し、各呼び出しに改行を追加します(-l)。ファイルを1行ずつ読み、()各行-nに提供されているスクリプトを実行します。-e
  • if(/A=([^\s]+)/){print "A : $1"; `scriptA.sh`}:この行に一致するA=ものがある場合は、印刷しA : something(角かっこはパターンがキャプチャされて保存されたことを示します$1)を実行しますscriptA
  • if(/B=([^\s]+)/){print "B : $1"; `scriptB.sh`}:上記と同じですが、Bの場合です。

または、値を抽出して解析することもできます。

$ grep -Po '[AB]=[^\s]+' Data.txt | 
    while IFS="=" read name val; do 
        echo "$name=$val"; 
        [ "$name" = "A" ] && scriptA.sh || scriptB.sh; 
    done

説明する

  • grep -Po '[AB]=[^\s]+' Data.txt-PできるようにするPCREそして、各一致が異なる行に印刷されるように-oします。 「AまたはBに一致し、次に空白以外の文字をできるだけ一致させることをgrep意味します。出力は、それぞれ1行の入力ファイルの完全なセットです。[AB]=[^\s]+=A=fooB=bar
  • while IFS="=" read name val:イオン入力フィールドの区切り文字を設定し、=2つの変数を読み取ります。これはそれらに関連する価値に$nameなることを意味します。AB$value
  • echo "$name=$val";:必要に応じてフォーマットを変更して印刷します。
  • [ "$name" = "A" ] && scriptA.sh || scriptB.sh;$nameそうであればA実行しscriptA.sh、そうでなければ実行しますscriptB.sh。上記の両方の解決策を呼び出すスクリプトが$ PATHにあるとしscriptA.shますscriptB.sh。適切に編集してください。

おすすめ記事