Homepage » come » Come rimuovere le righe dalla metà di un file usando il terminale Linux

    Come rimuovere le righe dalla metà di un file usando il terminale Linux

    Quando gestisci i tuoi server, una delle cose che hai bisogno di fare su base semi-regolare è estrarre le cose dal centro di un file. Forse è un file di registro, o è necessario aggiungere una singola tabella dal centro del tuo file di backup MySQL, come ho fatto io.

    Per capire i numeri di riga, un semplice comando grep -n ha eseguito il lavoro (l'argomento -n restituisce i numeri di riga). Questo ha reso facile capire cosa dovevo estrarre.

    grep -n wp_posts howtogeekdb010114.bak | Di Più

    Risultati in qualcosa di simile, che mostra i numeri di linea sul lato sinistro dell'output. Piping tutto in "more" fa in modo che tu possa vedere la prima riga senza che scorra. Ora hai il numero di riga da cui iniziare, e probabilmente quello con cui terminare.

    4160: - Struttura della tabella per la tabella 'wp_posts' 4163: DROP TABLE IF EXISTS 'wp_posts'; 4166: CREATE TABLE 'wp_posts' (4203: - Scaricamento dati per la tabella 'wp_posts' 4206: LOCK TABLES 'wp_posts' WRITE; 4207: / *! 40000 ALTER TABLE 'wp_posts' DISABLE KEYS * /; 4208: INSERT INTO 'wp_posts 'VALORI (1,2,' 2006-09-11 05:07:23 ',' 2006-09-11

    Potresti, naturalmente, solo collegare l'output di grep in un altro file, in questo modo:

    grep keyword filename.txt> outputfile

    Nel mio caso, questo non voleva funzionare, perché non potevo importare il backup risultante per qualche motivo. Quindi, ho trovato un modo diverso per estrarre le linee usando sed, e questo metodo ha funzionato.

    sed -n '4160,4209p' howtogeekdb0101140201.bak> outputfile

    Fondamentalmente la sintassi è così, assicurandosi di usare l'argomento -n e includere la "p" dopo il secondo numero di riga.

    sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' nomefile> nomefile output

    In altri modi puoi estrarre linee specifiche nel mezzo di un file? Potresti usare il comando "head" con l'argomento + number per leggere solo le prime x righe di un file, e quindi usare tail per estrarre quelle linee. Non l'opzione migliore, un sacco di spese generali. Opzione più semplice? È possibile utilizzare il comando split per trasformare il file in più file direttamente al numero di riga desiderato, quindi estrarre le righe utilizzando la testa o la coda.

    O puoi semplicemente usare sed.