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
Come rimuovere le righe dalla metà di un file usando il terminale Linux

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

Video: Come rimuovere le righe dalla metà di un file usando il terminale Linux
Video: Steam Deck - How to Install & Use Lutris on Desktop & Game Mode - Getting Started Guide - YouTube 2024, Aprile
Anonim
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.
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). Ciò ha reso facile capire cosa dovevo estrarre.

grep -n wp_posts howtogeekdb010114.bak | more

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 linea senza che scorra. Ora hai il numero di riga da cui iniziare, e probabilmente quello con cui terminare.

4160:-- Table structure for table `wp_posts` 4163:DROP TABLE IF EXISTS `wp_posts`; 4166:CREATE TABLE `wp_posts` ( 4203:-- Dumping data for table `wp_posts` 4206:LOCK TABLES `wp_posts` WRITE; 4207:/*!40000 ALTER TABLE `wp_posts` DISABLE KEYS */; 4208:INSERT INTO `wp_posts` VALUES (1,2,'2006-09-11 05:07:23','2006-09-11

Potresti, ovviamente, semplicemente reindirizzare 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' filename > outputfilename

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 con il numero di riga desiderato, quindi estrarre le linee utilizzando head o tail.

O puoi semplicemente usare sed.

Consigliato: