Jika saya gunakan cat -n text.txt
untuk secara otomatis memberi nomor pada baris, bagaimana saya kemudian menggunakan perintah untuk menunjukkan hanya nomor baris tertentu.
tail
+ head
juga dapat melakukan ini, seperti halnyaawk
Jika saya gunakan cat -n text.txt
untuk secara otomatis memberi nomor pada baris, bagaimana saya kemudian menggunakan perintah untuk menunjukkan hanya nomor baris tertentu.
tail
+ head
juga dapat melakukan ini, seperti halnyaawk
Jawaban:
Menggunakan sed
Pemakaian
$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Untuk mencetak satu baris (5)
$ sed -n 5p file
Line 5
Untuk mencetak beberapa baris (5 & 8)
$ sed -n -e 5p -e 8p file
Line 5
Line 8
Untuk mencetak rentang tertentu (5 - 8)
$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8
Untuk mencetak rentang dengan garis tertentu lainnya (5 - 8 & 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
Salah satu cara melakukannya adalah dengan menggunakan sed
:
cat -n text.txt | sed '11d'
di mana 11 adalah jumlah baris yang ingin Anda hapus.
Atau untuk menghapus semua kecuali 11:
cat -n text.txt | sed '11!d'
Kisaran juga dimungkinkan:
cat -n text.txt | sed '9,12!d'
Dan cat -n
bahkan tidak dibutuhkan:
sed '9,12!d' text.txt
Tergantung pada tujuan saya suka kepala atau grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
akan mengembalikan garis 41 hingga 50.
atau
cat /var/log/syslog -n | grep " 50" -b10 -a10
akan menampilkan baris 40 hingga 60. Masalahnya dengan metode grep adalah Anda harus menggunakan akun untuk mengisi nomor baris (perhatikan spasi)
Keduanya cukup berguna untuk parsing file log.
cat
meskipun
cat
tidak dapat melakukan apa yang diinginkan OP
Seperti yang orang lain tunjukkan kepada Anda, tidak perlu digunakan cat -n
. Program lain akan melakukannya untuk Anda. Namun, jika Anda benar-benar perlu mem-parsing output cat -n
dan hanya menampilkan garis-garis tertentu (misalnya, 4-8, 12 dan 42), Anda bisa melakukan:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
4 Line 4
5 Line 5
6 Line 6
7 Line 7
8 Line 8
12 Line 12
42 Line 42
In awk
, $1
adalah bidang pertama, jadi perintah ini mencetak semua baris yang bidang pertamanya adalah i) antara 4 dan 8 (inklusif) atau ii) 12 atau iii) 42.
Jika Anda juga ingin menghapus bidang yang ditambahkan oleh cat -n
untuk mendapatkan baris asli dari file, Anda dapat melakukan:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42