Editor de fluxo - Buffer de padrão
Uma das operações básicas que realizamos em qualquer arquivo é exibir seu conteúdo. Para isso, podemos usar oprintcomando que imprime o conteúdo do buffer de padrão. Então, vamos aprender mais sobre o buffer de padrão
Primeiro crie um arquivo contendo o número da linha, o nome do livro, seu autor e o número de páginas. Neste tutorial, usaremos este arquivo. Você pode usar qualquer arquivo de texto de acordo com sua conveniência. Nosso arquivo de texto terá a seguinte aparência:
[jerry]$ vi books.txt
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho,288
6) A Game of Thrones, George R. R. Martin, 864
Agora, vamos imprimir o conteúdo do arquivo.
[jerry]$ sed 'p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
1) A Storm of Swords, George R. R. Martin, 1216
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
6) A Game of Thrones, George R. R. Martin, 864
Você pode se perguntar por que cada linha está sendo exibida duas vezes. Deixe-nos descobrir.
Você se lembra do fluxo de trabalho do SED? Por padrão, SED imprime o conteúdo do buffer de padrão. Além disso, incluímos um comando de impressão explicitamente em nossa seção de comandos. Portanto, cada linha é impressa duas vezes. Mas não se preocupe. SED tem o-nopção para suprimir a impressão padrão do buffer de padrão. O comando a seguir ilustra isso.
[jerry]$ sed -n 'p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Parabéns! obtivemos o resultado esperado. Por padrão, o SED opera em todas as linhas. Mas podemos forçar o SED a operar apenas em certas linhas. Por exemplo, no exemplo abaixo, SED opera apenas na 3ª linha. Neste exemplo, especificamos um intervalo de endereços antes do comando SED.
[jerry]$ sed -n '3p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
3) The Alchemist, Paulo Coelho, 197
Além disso, também podemos instruir o SED a imprimir apenas algumas linhas. Por exemplo, o código a seguir imprime todas as linhas de 2 a 5. Aqui, usamos o operador vírgula (,) para especificar o intervalo de endereços.
[jerry]$ sed -n '2,5 p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
Existe também um caractere especial Dollar ($) que representa a última linha do arquivo. Então, vamos imprimir a última linha do arquivo.
[jerry]$ sed -n '$ p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
6) A Game of Thrones, George R. R. Martin, 864
No entanto, também podemos usar o caractere Dollar ($) para especificar o intervalo de endereços. O exemplo abaixo imprime da linha 3 até a última linha.
[jerry]$ sed -n '3,$ p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
3) The Alchemist, Paulo Coelho, 197 4) The Fellowship of the Ring, J. R. R. Tolkien, 432 5) The Pilgrimage, Paulo Coelho, 288 6) A Game of Thrones, George R. R. Martin, 864
Aprendemos como especificar um intervalo de endereços usando o operador vírgula (,). O SED oferece suporte a mais dois operadores que podem ser usados para especificar o intervalo de endereços. O primeiro é o operador de mais (+) e pode ser usado com o operador vírgula (,). Por exemploM, +n irá imprimir o próximo n linhas começando do número da linha M. Parece confuso? Vamos verificar com um exemplo simples. O exemplo a seguir imprime as próximas 4 linhas começando na linha número 2.
[jerry]$ sed -n '2,+4 p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Opcionalmente, também podemos especificar o intervalo de endereços usando o operador til (~). UsaM~nFormato. Ele indica que o SED deve começar na linha número M e processar a cada n (ésima) linha. Por exemplo,50~5corresponde ao número da linha 50, 55, 60, 65 e assim por diante. Vamos imprimir apenas linhas ímpares do arquivo.
[jerry]$ sed -n '1~2 p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
1) A Storm of Swords, George R. R. Martin, 1216
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
O código a seguir imprime apenas linhas pares do arquivo.
[jerry]$ sed -n '2~2 p' books.txt
Quando o código acima for executado, ele produzirá o seguinte resultado.
2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864