Yanıtlar:
Sadece sed
, boru olmadan
sed '1d;$d' file.txt
NOT
1
ortalama ilk satırd
ortalama sil;
2 komut için ayırıcı$
ortalama son satırSatır sayısını önceden bilmek gerekmez. tail
ve head
sırasıyla dosyanın başından veya sonundan bir denge alabilir.
Bu boru dosyanın ikinci satırında başlar (ilk satırı atlayarak) ve sonuncusunda durur (son satırı atlayarak). Başında veya sonunda birden fazla satırı atlamak için sayıları uygun şekilde ayarlayın.
tail -n +2 file.txt | head -n -1
diğer tarafa doğru yapmak elbette aynı şekilde çalışır:
head -n -1 file.txt | tail -n +2
İşte nasıl yapılır awk
:
awk 'NR>2 {print t} {t=$0}'
Ayrıca bunun için başka bir yol sed
:
sed '1d;x' file.txt
x
gelişmiş sed
komuttur, mevcut satırı öncekiyle değiştirir: akım arabelleğe gider ve önceki ekrana geçer ve sed
satır satır işlenirken devam eder (bu yüzden ilk satır boş kalır ).
awk
Her adımdaki çözüm (satır), geçerli satırı değişkenin içine koyar ve yalnızca ikinci satır geçtikten sonra yazdırmaya başlar. Böylece ekranda ikinciden en sonuncuya doğru çizgiler dizildi. Son satır, satır değişkende olduğundan çıkarılır ve yalnızca bir sonraki adımda yazdırılmalıdır, ancak tüm adımlar zaten bitmiştir ve çizgiyi asla ekranda görmeyiz.
Aynı fikir perl
:
perl -ne 'print $t if $.>2 ; $t=$_' file.txt
$.
satır numarası ve $_
geçerli satır anlamına gelir . yapı
perl -n
için kısayol while(<..>) {..}
ve -e
satır içi komut dosyası içindir.
Python'da böyle yapardım.
#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
L = []
for line in f:
line = re.sub(r'\n', r'', line)
L.append(line)
print('\n'.join(L[1:-1]))
Yukarıdaki kodu bir dosyaya yapıştırın ve olarak adlandırın script.py
. Komut dosyasını kontrol etmek istediğiniz dosyaya karşı çalıştırın.
python3 script.py /path/to/the/file
Örnek:
$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana
Mac kullanıcıları için:
Mac'te head -n -1
çalışmıyor. Bunun yerine, dosyayı ters çevirin, ilk satırı kesin, sonra geriye doğru çevirin:
tail -r file.txt | tail -n +2 | tail -r
Açıklama:
tail -r
: girişindeki satırların sırasını ters çevirir
tail -n +2
: girişindeki ikinci satırdan başlayarak bütün satırları yazdırır.
head -n -1
ilk VE son satırını.txt
siler.