Saya punya file teks. Tugas - dapatkan baris pertama dan terakhir dari file setelah
$ cat file | grep -E "1|2|3|4" | commandtoprint
$ cat file
1
2
3
4
5
Perlu ini tanpa keluaran cat (hanya 1 dan 5).
~$ cat file | tee >(head -n 1) >(wc -l)
1
2
3
4
5
5
1
Mungkin ada solusi yang lebih canggung dan lebih pendek ...
wc -l
tidak ada hubungannya dengan mengeluarkan baris terakhir file.Jawaban:
Solusi sed :
Saat membaca dari
stdin
apakah akan terlihat seperti ini (misalnyaps -ef
):Solusi kepala & ekor :
Saat data berasal dari perintah (
ps -ef
):Solusi awk :
Dan juga contoh pipa dengan
ps -ef
:sumber
(head -n1 file;tail -n1 file)
saya memiliki perintah dan pipa yang sangat besar sebagai simbol terakhir. Jadi| sed '1p;$!d'
lebih pendek.head && tail
benar-benar bekerja untuk Anda? hanyaseq 10 | (head -n1 && tail -n1)
mencetak1
.-e 1b
- pada baris pertama, cabang ke ujung skrip sed, di mana titik "cetak" implisit terjadi. Jika input hanya satu baris, sed berakhir. Kalau tidak, untuk semua baris kecuali yang terakhir, hapus. Pada baris terakhir, "cetak" implisit terjadi lagi.sed
4.2.2. Tepuk tangan.sed -n '1p;$p' file.txt
akan mencetak baris pertama dan terakhir dari file.txt.sumber
sed -e 1b -e '$!d'
jika Anda tidak menginginkannya.Cara Bash≥4 murni yang lucu:
Setelah ini, Anda akan memiliki array
ary
dengan bidang pertama (yaitu, dengan indeks0
) menjadi baris pertamafile
, dan bidang terakhir menjadi baris terakhirfile
. Callbackcb
(opsional jika Anda ingin menghirup semua baris dalam array) menghapus semua garis tengah agar tidak mengacaukan memori. Sebagai produk sampingan gratis, Anda juga akan memiliki jumlah baris dalam file (sebagai indeks terakhir array +1).Demo:
sumber
Dengan
sed
Anda bisad
menghapus garis jika BUKAN yang1
pertama DAN BUKAN yang$
satu.Gunakan
!
untukNOT
(meniadakan) suatu kondisi danX{Y..}
konstruk untuk menggabungkan kondisiX
ANDY
:atau Anda dapat menggunakan rentang - dari
2
nd ke la$
t - dan menghapus semua baris dalam rentang itu kecuali baris la$
t:sumber
Menggunakan Perl:
Di atas mencetak item pertama dalam output
seq 10
viaif 1..1
, sedangkanor eof
juga akan mencetak item terakhir.sumber
/etc
abrt
danyum.repos.d
harus dilakukan pertanyaan ini?Tanpa kucing:
atau
sumber
sumber