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 wkomutu, 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")}'
awkama hangi noktada>?