Como remover linhas do meio de um arquivo usando o terminal Linux
Quando você gerencia seus próprios servidores, uma das coisas que você acaba precisando fazer em uma base semi-regular é extrair coisas do meio de um arquivo. Talvez seja um arquivo de log, ou você precisa extrair uma única tabela do meio do seu arquivo de backup do MySQL, como eu fiz.
Para descobrir os números de linha, um simples comando grep -n fez o trabalho (o argumento -n produz os números de linha). Isso facilitou descobrir o que eu precisava extrair.
grep -n wp_posts howtogeekdb010114.bak | Mais
Resulta em algo parecido com isso, que mostra os números das linhas no lado esquerdo da saída. Piping tudo em "mais" garante que você pode ver a primeira linha sem rolagem. Agora você tem o número da linha para começar, e provavelmente aquele para terminar.
4160: - Estrutura da mesa para a tabela 'wp_posts' 4163: DROP TABLE IF EXISTS 'wp_posts'; 4166: CRIAR TABELA 'wp_posts' (4203: - Dados de dump para a tabela 'wp_posts' 4206: WLITE 'LOCK TABLES' wpITE; 4207: / *! 40000 ALTER TABLE 'wp_posts' TECLAS DESABILITADAS * /; 4208: INSERT INTO 'wp_posts 'VALUES (1,2,' 2006-09-11 05:07:23 ',' 2006-09-11
Você poderia, é claro, apenas canalizar a saída do grep para outro arquivo, assim:
grep keyword nome_do_arquivo.txt> outputfile
No meu caso, isso não queria funcionar, porque não consegui importar o backup resultante por algum motivo. Então, eu encontrei uma maneira diferente de extrair as linhas usando sed, e esse método funcionou.
sed -n '4160,4209p' howtogeekdb0101140201.bak> arquivo de saída
Basicamente a sintaxe é assim, certificando-se de usar o argumento -n, e incluir o "p" após o número da segunda linha.
sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' nome do arquivo> outputfilename
Algumas outras maneiras de extrair linhas específicas no meio de um arquivo? Você poderia usar o comando “head” com o argumento + number para apenas ler as primeiras x linhas de um arquivo, e então usar tail para extrair essas linhas. Não é a melhor opção, muita sobrecarga. Opção mais simples? Você pode usar o comando split para transformar o arquivo em vários arquivos diretamente no número de linha desejado e extrair as linhas usando a cabeça ou a cauda..
Ou você pode apenas usar sed.