Grep ve sort komutlarını kullanarak nasıl sıralayabilirim?


15

Ben dosya bulunan tüm TCP hizmetlerin sıralı bir liste oluşturmak istiyorum /etc/services, boru komutunun çıktısını grep tcp /etc/serviceskomuta içine sort, sonra dosyaya bu borunun çıkışını yönlendirmek ~/pipelab.txt.

Çıktımın yanlış olduğuna dair bir hata mesajı alıyorum ve nedenini bilmiyorum.

En son denediğim bu:

grep tcp /etc/services > ~/pipelab.txt | sort

Yanıtlar:


11

> ~/pipelab.txtaçıkça boru hattı operatörünün aynı tarafındaki komuta aittir |. Yani grepçıktıyı boruya dönüştürmek yerine dosyaya yönlendirirsiniz sort:

grep tcp /etc/services | sort > ~/pipelab.txt

21

Her iki yönlendirme için çıktısını çalışıyoruz grepbir dosyaya ve boru bunu sort. Bunu yapamazsın, en azından böyle değil.

Bunun yerine, gerçekten sıralamak için beslemek istiyorsunuz:

grep tcp /etc/services | sort

ve sonra sıralı çıktıyı (yani, sıradan çıkanları) bir dosyaya yönlendirmek istersiniz, böylece yeniden yönlendirmeyi sıralamadan sonra koyarsınız:

grep tcp /etc/services | sort > ~/pipelab.txt

Hem borular hem de yönlendirmeler, komutun çıkışının nereye gittiğini değiştirerek çalışır. Bunlardan iki tanesinin çıktısıyla mücadele etmesini sağladınız grep(ve sonuç olarak, yönlendirmeyi kazandı ve ayrılmamış çıktıyı dosyanıza yazdı).


Çok teşekkür ederim, sıralama komutunu hala çalışacağı herhangi bir yere koyduğum sürece düşündüm.
user72510

1
@ user72510 Boru hatları soldan sağa doğru sırayla işlenir. Bu gerçekten yararlıdır, örneğin sıralanan çıktının ilk beş satırını istiyorsanız, bunu yapabilirsiniz grep tcp /etc/services | sort | head -n 5. sortÖncesinde yapılması önemlidir head, ya da istediğiniz satırları alamazsınız.
derobert

Bunu açıkladığınız için teşekkürler. Sınıfı çevrimiçi alıyorum, bu yüzden kendime öğretiyorum. 40 yaşında olduğumu da eklemek yavaş öğrenmektir.
user72510
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.