Saya menemukan solusi ini untuk mencetak baris tertentu dari file teks:
sed '123!d;q' file
Mengapa tidak berhenti setelah input pertama dalam kasus ini?
Dalam bahasa Inggris, sed
program ini berarti: untuk setiap baris,
123!
] jika nomor baris saat ini bukan 123, maka [ d
] hapus baris saat ini dan mulai siklus berikutnya (yaitu pindah ke baris berikutnya);d
perintah tidak dieksekusi), [ q
] keluar tanpa memroses baris lagi (tetapi cetaklah garis saat ini dalam pergolakan yang sekarat).Atau jika Anda lebih suka, dalam sintaksis shell:
line_number=0
while IFS= read -r pattern_space; do
line_number=$(($line_number+1))
if [ $line_number -ne 123 ]; then # 123!
continue # d
fi
echo "$pattern_space"; break # q
echo "$pattern_space" # implicit final print (never reached)
done
!
terhubung ked
, bukan123
.{d;q;}
, tidak seharusnyaq
berlaku untuk setiap baris (jadi hanya yang pertama)?q
berlaku untuk setiap baris di mana dieksekusi. Tetapi ketika nomor baris bukan 123,d
perintah dieksekusi, dan artinya adalah untuk langsung melompat ke baris input berikutnya.sed -n 123p
(mencetak hasil yang sama) kecuali berhenti setelah baris 123 daripada memproses ribuan baris yang berpotensi tidak akan pernah melakukan apa pun dengan cara apa pun.