Risposte:
Solo con sed
, senza tubi:
sed '1d;$d' file.txt
NOTA
1
significa prima rigad
significa cancellare;
è il separatore per 2 comandi$
significa l' ultima rigaNon è necessario conoscere in anticipo il numero di righe. tail
e head
può prendere un offset rispettivamente dall'inizio o dalla fine del file.
Questa pipe inizia dalla seconda riga del file (salta la prima riga) e si ferma all'ultima ma una (salta la riga finale). Per saltare più di una riga all'inizio o alla fine, regolare i numeri di conseguenza.
tail -n +2 file.txt | head -n -1
facendo il contrario, funziona allo stesso modo, ovviamente:
head -n -1 file.txt | tail -n +2
Ecco come farlo con awk
:
awk 'NR>2 {print t} {t=$0}'
Anche un altro modo per sed
:
sed '1d;x' file.txt
x
è un sed
comando avanzato , cambia la linea corrente con la precedente: la corrente va nel buffer e la precedente passa allo schermo e così via durante l' sed
elaborazione del flusso riga per riga (ecco perché la prima riga sarà vuota).
awk
soluzione su ogni passaggio (riga) inserisce la riga corrente nella variabile e inizia a stamparla solo dopo il passaggio della seconda riga. Quindi, abbiamo ottenuto una sequenza di linee merda sullo schermo dalla seconda all'ultima ma una. L'ultima riga viene omessa perché la riga si trova nella variabile e deve essere stampata solo nel passaggio successivo, ma tutti i passaggi sono già terminati e la riga non viene mai visualizzata sullo schermo.
Stessa idea in perl
:
perl -ne 'print $t if $.>2 ; $t=$_' file.txt
$.
indica il numero di riga e la $_
riga corrente.
perl -n
è una scorciatoia per la while(<..>) {..}
struttura ed -e
è per lo script in linea.
In Python vorrei fare così.
#!/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]))
Incolla il codice sopra in un file e chiamalo come script.py
. Esegui lo script sul file con cui desideri verificare.
python3 script.py /path/to/the/file
Esempio:
$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana
Per utenti Mac:
Su Mac, head -n -1
non funziona. Invece, invertire il file, tagliare la prima riga, quindi invertire indietro:
tail -r file.txt | tail -n +2 | tail -r
Spiegazione:
tail -r
: inverte l'ordine delle linee nel suo input
tail -n +2
: stampa tutte le righe a partire dalla seconda riga nel suo input
head -n -1
rimuove la prima E l'ultima riga del mio.txt
file, su Ubuntu 14.04.2LTS.