Come ottenere la prima riga di un file di testo di input, eliminando quella riga dal file di testo


11

Come posso ottenere la prima riga di un file di testo di input, eliminando quella riga dal file di testo?

Se avessi un file di testo /myPathToTheFile.txtcome questo

► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

Vorrei ottenere questa linea come output

► put returns between paragraphs

e il mio file di testo ora dovrebbe essere così

► for linebreak add 2 spaces at end
► _italic_ or **bold*

Si noti che il costo di questa operazione è proporzionale alla dimensione del file. Quindi, se il file è grande e lo fai spesso, sarà molto lento.
CodesInChaos,

Risposte:


13
ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX

o

ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq

o, meno digitando:

ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'

Wow, buon uso di ed ...!
qwr,

10

Almeno con GNU sed:

$ cat file
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

$ sed -i '1{
w /dev/stdout
d}' file
► put returns between paragraphs

$ cat file
► for linebreak add 2 spaces at end
► _italic_ or **bold**

Con GNU sed può essere scritto come una riga

sed -i -e '1 {w /dev/stdout' -e 'd}' file

6

Supponendo che tu stia chiedendo uno script di shell, questo farà ciò che hai richiesto:

NAME=$1
head -n 1 $NAME
sed -i '1d' $NAME


2

È possibile utilizzare head, taile mv:

Visualizza la prima riga:

head -1 myPathToTheFile.txt

Mantenere le ultime ( +2) righe:

tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt

1

Utilizzando descrittori di file e un po 'di python

{
    { 
    head -n1 >&3; 
    3>&- tail -n +1;
    3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
    }<file 1<>file
} 3>&1

1

Usando la testa e la coda. Il file è target.txt

head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp

Nota: assicurarsi che non vi sia alcun file tmp esistente nella cartella corrente, altrimenti verrà rimosso.

Spiegazione:

  • "head -1" seleziona la prima riga
  • "tail -n + 2 target.txt> tmp" seleziona tutte le linee dal 2 ° in poi (incluso) e le mette in tmp
  • mv sovrascrive il file originale con tmp
  • rm tmp rimuoverà il file tmp così creato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.