Bagaimana cara saya mengurutkan menggunakan perintah grep dan sortir?

14

Saya ingin membuat daftar diurutkan dari semua layanan TCP yang ditemukan dalam file /etc/services, pipa output dari perintah grep tcp /etc/serviceske perintah sort, kemudian mengarahkan output pipa ini ke file ~/pipelab.txt.

Saya terus mendapatkan pesan kesalahan bahwa output saya salah, dan saya tidak tahu mengapa.

Inilah yang saya coba terakhir:

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

Jawaban:

11

> ~/pipelab.txtjelas milik perintah di sisi yang sama dari operator pipa |. Ie Anda mengarahkan grepoutput ke file, bukan pipa ke sort:

grep tcp /etc/services | sort > ~/pipelab.txt
Hauke ​​Laging
sumber
21

Anda mencoba mengalihkan output grepke file dan mengirimkannya ke pipa sort. Anda tidak dapat melakukan itu, setidaknya tidak seperti itu.

Sebagai gantinya, Anda benar-benar hanya ingin memberi makan untuk menyortir:

grep tcp /etc/services | sort

dan kemudian Anda ingin mengarahkan output yang diurutkan (yaitu, apa yang keluar dari sortir) ke file, jadi Anda meletakkan redirect setelah diurutkan:

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

Kedua pipa dan pengalihan bekerja dengan mengubah ke mana output dari perintah berjalan. Anda memiliki dua dari mereka berebut keluaran grep(dan akhirnya, redirect menang, dan menulis keluaran yang tidak disortir ke file Anda).

derobert
sumber
Terima kasih banyak, saya pikir selama saya meletakkan perintah sortir di mana saja itu masih berfungsi.
user72510
1
@ user72510 Pipa diproses secara berurutan, dari kiri ke kanan. Itu sebenarnya berguna, misalnya jika Anda ingin lima baris pertama dari output yang diurutkan, Anda bisa melakukannya grep tcp /etc/services | sort | head -n 5. Yang penting sortdilakukan sebelum head, atau Anda tidak akan mendapatkan garis yang Anda inginkan.
derobert
Terima kasih telah menjelaskannya. Saya mengambil kelas online jadi saya belajar sendiri. Menambahkan bahwa saya berusia 40 tahun itu adalah pembelajaran yang lambat.
user72510