Bir metin dosyasından belirli bir satır yazdırmak için bu çözümle karşılaştım:
sed '123!d;q' file
Bu durumda neden ilk girdi satırından sonra sed bırakmıyor?
Bir metin dosyasından belirli bir satır yazdırmak için bu çözümle karşılaştım:
sed '123!d;q' file
Bu durumda neden ilk girdi satırından sonra sed bırakmıyor?
Yanıtlar:
İngilizce olarak, bu sedprogram: her satır için,
123!] geçerli satır numarası 123 değilse, [ d] geçerli satırı silin ve sonraki döngüyü başlatın (yani bir sonraki satıra geçin);dkomut yürütülmediyse ulaşırız ), [ q] daha fazla satır işlemeden çıkın (ancak ölmekte olan tahtlarımızdaki geçerli satırı yazdırın).İsterseniz kabuk sözdiziminde:
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
{d;q;}, olmamalıdır qher satırı için geçerli (yani sadece ilk)?
qyürütüldüğü her satır için geçerlidir. Ancak satır numarası 123 olmadığında, dkomut yürütülür ve anlamı bir sonraki giriş satırına hemen atlamaktır.
sed -n 123p(aynı çıktıyı yazdırır), ancak hiçbir şekilde bir şey yapamayacağı potansiyel olarak binlerce daha fazla satırı işlemek yerine 123 satırından sonra durur .
!bağlandıddeğil123.