Yanıtlar:
Bunun için kullanabilirsiniz awk
.
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>
, mevcut dosyaların üzerine yazarak tüm çıktıları dosyaya yazdırır. Aynı örneğe ait eski çıktının üzerine yeni satır yazılmasına neden olacak şekilde değerlendirilmez awk
. Diğer bir deyişle, birden fazla eşleşme varsa, "eşleşme" dosyası her bir eşleşmenin birbirinden ayrı olduğunu içerir OFS
. Varolan dosyaların tedavisinde >
ve >>
varlığındaki fark .
İşte bir sed
örnek:
Not: sed w
komutu, komut dosyası her çalıştırıldığında mevcut bir dosyanın üzerine yazacaktır, ancak yalnızca bu yazma komutu tetiklendiğinde; dolayısıylarm
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
Awk ile dosya ekleyebilirsiniz:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
veya daha kısa:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awk
ama hangi noktada>
?