2013-03-14 6 views
6

Sto eseguendo uno script di monitoraggio degli appuntamenti in Bourne Shell e devo eliminare un appuntamento dal file di testo. Come faccio a cancellare una riga da un file senza lasciare spazi bianchi se ho il numero di linea? Il file è simile al seguente:Elimina riga dal file al numero di riga specificato in bourne shell

1:19:2013:Saturday:16.00:20.30:Poker 
1:24:2013:Thursday:11.00:11.45:Project meeting 
1:24:2013:Thursday:14.00:15.10:CSS Meeting 

risposta

17

Per eliminare la linea 5, che fare:

sed -i '5d' file.txt 

Per un numero di riga variabile:

sed -i "${line}d" file.txt 

Se l'opzione -i non è disponibile nella tua sapore di sed, è possibile emularlo con un file temporaneo:

sed "${line}d" file.txt > file.tmp && mv file.tmp file.txt 
+1

POSIX sed non supporta sed -i. Dato che stiamo usando Bourne qui, c'è la possibilità che questo non sia Linux. Ad esempio, non funzionerà in Solaris/usr/bin/sed. FWIW. –

+0

@jimmcnamara Buon punto. Aggiornato con una risposta aggiuntiva non-'-i'. –

+0

ha funzionato perfettamente per me, grazie. – user1731199

0

Ecco una sveltina con awk:

lineToDelete=$1 
awk "NR != $lineToDelete" 
+0

Questo non cancella la riga dal file. Stampa il file su STDOUT, tranne questa linea. – mivk

2

da eliminare appuntamento numero (linea):

sed -i '3d' input 

Per eliminare per nome:

sed -i '/:Poker/d' input 

Se l'in-place (-i) l'opzione non funziona sul tuo sistema che puoi fare:

sed '/:Poker/d' input > input.tmp && mv input.tmp input 
+0

POSIX sed non supporta sed -i. Dato che stiamo usando Bourne qui, c'è la possibilità che questo non sia Linux. Ad esempio, non funzionerà in Solaris/usr/bin/sed. –

Problemi correlati