Jadi saya tahu ada alat untuk masalah ini karena saya pernah mendengarnya, tapi saya tidak tahu apa itu.
Saya ingin melakukan sesuatu seperti memfilter semua data tetapi nama pengguna di / etc / passwd.
Sebagai contoh, saya ingin mengambil user1, user2, dan user3 dari file berikut. Dalam hal ini, logikanya bisa "Ambil teks hingga ':' yang pertama pada setiap baris file".
user1:x:1:4
user2:x:2:5
user3:x:3:6
Outputnya adalah:
user1
user2
user3
awk
mengambil nama file, sehingga Anda dapat melewati pipa dan melakukannyaawk -F: '{print $1}' /etc/passwd
tr
danat
beberapa contoh dari beberapa hal yang tidak).Inilah Perl one-liner:
sumber
Di bawah perl dan awk, ada alat ketiga untuk pekerjaan seperti itu, yaitu:
Ini adalah perintah substitusi: pengganti dari titik dua:, diikuti oleh titik, yang merupakan joker untuk karakter apa pun, dengan jumlah apa pun (*), tanpa apa-apa.
Ini adalah (ubstitute) / FROM / TO / 'dengan TO menjadi kosong, yang berarti' hapus semua dari yang pertama (karena sed secara default serakah) kolon (sampai akhir baris, karena sed bekerja dengan baik dengan seluruh baris).
Tentu saja
cut
itu perintah yang baik juga, tetapi saya akan mengatakan dari keluarga yang berbeda.sumber
Dalam contoh Anda, ketiga nama memiliki panjang yang sama. Dalam kasus seperti itu - yang mungkin terjadi, tetapi tidak begitu mungkin dengan / etc / passwd - Anda mungkin menggunakan colrm juga:
atau tentu saja
(kasus yang jarang terjadi di mana
useless use of cat
tidak berlaku, karena Anda tidak dapat memberikan FILE untuk bertindak sebagai parameter.)sumber
cat
masih berguna di sana:colrm 6 < FILE
.cat foo | grep bar
.Hanya untuk kelengkapan, tidak perlu untuk perintah eksternal, shell (Bourne shell atau yang kompatibel) dapat mengatasinya sendiri:
Tentu saja, ini mungkin yang paling lambat dari semua solusi yang mungkin, jadi untuk file besar pilih yang lain.
sumber