Jawaban:
Anda bisa menggunakannya awk
untuk itu.
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>
mencetak semua output ke file, menimpa file yang ada. Itu tidak dievaluasi sedemikian rupa sehingga akan menghasilkan setiap baris baru menimpa keluaran lama dari contoh yang sama awk
. Artinya, jika ada beberapa kecocokan, file "kecocokan" akan berisi setiap kecocokan yang dipisahkan oleh OFS
. Perbedaan antara >
dan >>
ada dalam perawatan file yang ada.
Berikut adalah sed
contohnya:
Catatan: w
perintah sed akan menimpa file yang ada setiap kali skrip dijalankan, tetapi hanya jika perintah tulis tertentu dipicu; karenanyarm
rm -f file-{yes,not}
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file
sed -n '/PATTERN/p;//! w file-not' infile >file-yes
Anda dapat menambahkan file dalam awk:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
atau lebih pendek:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awk
tetapi pada titik apakah itu mengevaluasi>
? Jika dievaluasi setiap kali persyaratan berlaku, Anda akan mendapatkan dua file satu-baris ...