次の内容を含むファイル(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
説明する
-lne
print
:各入力行から末尾の改行を削除し、各呼び出しに改行を追加します(-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=foo
B=bar
while IFS="=" read name val
:イオン入力フィールドの区切り文字を設定し、=
2つの変数を読み取ります。これはそれらに関連する価値に$name
なることを意味します。A
B
$value
echo "$name=$val";
:必要に応じてフォーマットを変更して印刷します。[ "$name" = "A" ] && scriptA.sh || scriptB.sh;
:$name
そうであればA
実行しscriptA.sh
、そうでなければ実行しますscriptB.sh
。上記の両方の解決策を呼び出すスクリプトが$ PATHにあるとしscriptA.sh
ますscriptB.sh
。適切に編集してください。