Editor de fluxo - sintaxe básica
Este capítulo apresenta os comandos básicos que o SED suporta e sua sintaxe de linha de comando. O SED pode ser invocado nas duas formas a seguir:
sed [-n] [-e] 'command(s)' files
sed [-n] -f scriptfile files
O primeiro formulário permite especificar os comandos in-line e eles são colocados entre aspas simples. O último permite especificar um arquivo de script que contém comandos SED. No entanto, podemos usar os dois formulários juntos várias vezes. O SED oferece várias opções de linha de comando para controlar seu comportamento.
Vamos ver como podemos especificar vários comandos SED. SED fornece odeletecomando para deletar certas linhas. Vamos deletar a 1ª, 2ª e 5ª linhas. Por enquanto, ignore todos os detalhes do comando delete. Discutiremos mais sobre o comando delete posteriormente.
Primeiro, exiba o conteúdo do arquivo usando o cat comando.
[jerry]$ cat books.txt
Ao executar o código acima, você obtém 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
Agora instrua o SED para remover apenas algumas linhas. Aqui, para excluir três linhas, especificamos três comandos separados com a opção -e.
[jerry]$ sed -e '1d' -e '2d' -e '5d' books.txt
Ao executar o código acima, você obtém o seguinte resultado:
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864
Além disso, podemos escrever vários comandos SED em um arquivo de texto e fornecer o arquivo de texto como um argumento para SED. O SED pode aplicar cada comando no buffer de padrão. O exemplo a seguir ilustra a segunda forma de SED.
Primeiro, crie um arquivo de texto contendo comandos SED. Para facilitar o entendimento, vamos usar os mesmos comandos SED.
[jerry]$ echo -e "1d\n2d\n5d" > commands.txt
[jerry]$ cat commands.txt
Ao executar o código acima, você obtém o seguinte resultado:
1d
2d
5d
Agora instrua o SED a ler os comandos do arquivo de texto. Aqui, alcançamos o mesmo resultado mostrado no exemplo acima.
[jerry]$ sed -f commands.txt books.txt
Ao executar o código acima, você obtém o seguinte resultado:
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones,George R. R. Martin, 864
Opções Padrão
SED suporta as seguintes opções padrão:
-n: Impressão padrão do buffer de padrão. Por exemplo, o seguinte comando SED não mostra nenhuma saída:
[jerry]$ sed -n '' quote.txt
-e
[jerry]$ sed -e '' -e 'p' quote.txt
Ao executar o código acima, você obtém o seguinte resultado:
There is only one thing that makes a dream impossible to achieve: the fear of failure.
There is only one thing that makes a dream impossible to achieve: the fear of failure.
- Paulo Coelho, The Alchemist
- Paulo Coelho, The Alchemist
-f
: O próximo argumento é um arquivo contendo comandos de edição. Os colchetes angulares implicam em parâmetro obrigatório. No exemplo a seguir, especificamos o comando de impressão por meio do arquivo:
[jerry]$ echo "p" > commands
[jerry]$ sed -n -f commands quote.txt
Ao executar o código acima, você obtém o seguinte resultado:
There is only one thing that makes a dream impossible to achieve: the fear of failure.
- Paulo Coelho, The Alchemist
Opções específicas do GNU
Vamos examinar rapidamente as opções SED específicas do GNU. Observe que essas opções são específicas do GNU; e pode não ser suportado por outras variantes do SED. Em seções posteriores, discutiremos essas opções com mais detalhes.
-n, --quiet, --silent: O mesmo que a opção -n padrão.
-e script, --expression = script: Igual à opção -e padrão.
-f arquivo de script, --file = arquivo de script: O mesmo que a opção -f padrão.
--follow-symlinks: Se esta opção for fornecida, o SED segue links simbólicos enquanto edita os arquivos no local.
-i [SUFFIX], --in-place [= SUFFIX]: Esta opção é usada para editar o arquivo no local. Se o sufixo for fornecido, ele faz um backup do arquivo original, caso contrário, ele sobrescreve o arquivo original.
-l N, --line-lenght = N: Esta opção define o comprimento da linha para l comando para N caracteres.
--posix: Esta opção desativa todas as extensões GNU.
-r, --regexp-extended: Esta opção permite usar expressões regulares estendidas em vez de expressões regulares básicas.
-u, --unbuffered: quando esta opção é fornecida, o SED carrega uma quantidade mínima de dados dos arquivos de entrada e libera os buffers de saída com mais freqüência. É útil para editar a saída de "tail -f" quando você não deseja esperar pela saída.
-z, --null-data: Por padrão, o SED separa cada linha por um caractere de nova linha. Se a opção de dados NULL for fornecida, ela separará as linhas por caracteres NULL.