私はシェルスクリプトに初めて触れました。これは以前の質問のバリエーションだけですが、まだ答えを見つけることができません。次のtxtファイルがあります(1行、スペースなし)。
;100=Raspberry;101=Apple;102=Orange;103=Kiwi;104=grape;
私は出力として、101=*
または103=*
出力として何かを選択するのが好きです。したがって、出力は次のようになります。
;101=Apple;103=Kiwi
修正してコマンドを作成しようとしました。
grep -o -m 1 ';101=.*;\|;103=.*' file.txt
ただし、それ以降のすべての項目が選択されます101=.*
。コマンドにそのように表示されていることはわかりますが、どのように変更するのかわかりません。 Ubuntu 16を使用しています。
答え1
.*
できるだけ多くの文字を一致させようとします。これにより、残りの行を取得できます。したがって、(すべての文字)の代わりに(セミコロンを除くすべての文字)を.
使用する必要があります。[^;]
grep -o ';101=[^;]*\|;103=[^;]*'
-m 1
一文で何を達成すべきか分からない。とにかく望ましい結果を得るには、出力を1行にまとめる必要があります。しかし、私はあなたがそれを行う方法を見つけることができると確信しています(結局それはあなたの練習であり、私たちの練習ではありません)。
答え2
同じ効果を得るために、次のawkコマンドを使用しました。
awk -F ";" '{print ";"$3";"$5}' filename
出力
;101=Apple;103=Kiwi