Editor de fluxo - Comandos básicos

Este capítulo descreve vários comandos SED úteis.

Apagar Comando

SED fornece vários comandos para manipular texto. Vamos primeiro explorar sobre odeletecomando. Aqui está como você executa um comando de exclusão:

[address1[,address2]]d

address1 e address2são os endereços inicial e final, respectivamente, que podem ser números de linha ou strings de padrão. Ambos os endereços são parâmetros opcionais.

Como o nome sugere, o comando delete é usado para realizar a operação de exclusão e como o SED opera on-line, podemos dizer que este comando é usado para excluir linhas. Observe que o comando delete remove linhas apenas do buffer de padrão; a linha não é enviada ao fluxo de saída e o arquivo original permanece inalterado. O exemplo a seguir ilustra esse ponto.

[jerry]$ sed 'd' books.txt

Mas onde está a saída? Se nenhum endereço de linha for fornecido, o SED opera em todas as linhas por padrão. Conseqüentemente, ele exclui todas as linhas do buffer de padrão. É por isso que o comando não imprime nada na saída padrão.

Vamos instruir o SED a operar apenas em certas linhas. O exemplo a seguir remove apenas a 4ª linha.

[jerry]$ sed '4d' 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 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Além disso, o SED também aceita o intervalo de endereços usando vírgula (,). Podemos instruir o SED a remover as linhas N1 a N2. Por exemplo, o exemplo a seguir exclui todas as linhas de 2 a 4.

[jerry]$ sed '2, 4 d' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

1) A Storm of Swords, George R. R. Martin, 1216 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

O intervalo de endereços do SED não se limita apenas a números. Também podemos especificar padrões como um endereço. O exemplo a seguir remove todos os livros do autor Paulo Coelho.

[jerry]$ sed '/Paulo Coelho/d' 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 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Também podemos especificar um intervalo de endereços usando o padrão textual. O exemplo a seguir remove todas as linhas entre os padrõesStorm e Fellowship.

[jerry]$ sed '/Storm/,/Fellowship/d' books.txt  
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Além disso, também podemos usar os operadores dólar ($), mais (+) e til (~) com SED.

Comando de escrita

Uma das operações importantes que realizamos em qualquer arquivo é o backup, ou seja, fazemos outra cópia do arquivo. SED fornece owritecomando para armazenar o conteúdo do buffer de padrão em um arquivo. Dada a seguir está a sintaxe dowrite comando que é semelhante ao delete comando.

[address1[,address2]]w file

Aqui, address1 e address2são os endereços inicial e final, respectivamente, que podem ser números de linha ou strings de padrão. Ambos os endereços são parâmetros opcionais.

Na sintaxe acima, w refere-se ao comando de escrita e fileé o nome do arquivo no qual você armazena o conteúdo. Cuidado com ofileparâmetro. Quando um nome de arquivo é fornecido, o SED cria um arquivo rapidamente se ele não estiver presente e o substitui se já estiver presente.

Vamos fazer uma cópia exata do arquivo usando SED. Observe que deve haver exatamente um espaço entrew e file.

[jerry]$ sed -n 'w books.bak' books.txt

Criamos outro arquivo chamado books.bak. Agora verifique se ambos os arquivos têm conteúdo idêntico.

[jerry]$ diff books.txt books.bak  
[jerry]$ echo $?

Ao executar o código acima, você obtém o seguinte resultado:

0

Você pode assumir que o cpcomando faz exatamente a mesma coisa. Sim! ocpcomando faz a mesma coisa, mas SED é um utilitário amadurecido. Permite a criação de um arquivo contendo apenas algumas linhas do arquivo fonte. Vamos armazenar apenas linhas pares em outro arquivo.

[jerry]$ sed -n '2~2 w junk.txt' books.txt  
[jerry]$ cat junk.txt

Ao executar o código acima, você obtém 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

Você também pode usar os operadores vírgula (,), dólar ($) e mais (+) com o comando write.

Além disso, o SED também oferece suporte à correspondência de padrões com o comando de gravação. Suponha que você queira armazenar todos os livros de autores individuais em um arquivo separado. Uma maneira chata e demorada é fazê-lo manualmente, e a maneira mais inteligente é usar o SED.

[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w 
Tolkien.txt' books.txt

No exemplo acima, estamos comparando cada linha com um padrão e armazenando a linha correspondida em um arquivo específico. É muito simples. Para especificar vários comandos, usamos-emudança do comando SED. Agora vamos ver o que cada arquivo contém:

[jerry]$ cat Martin.txt

Ao executar o código acima, você obtém o seguinte resultado:

1) A Storm of Swords, George R. R. Martin, 1216 
6) A Game of Thrones, George R. R. Martin, 864

Deixe-nos mostrar o conteúdo do arquivo.

[jerry]$ cat Paulo.txt

Ao executar o código acima, você obtém o seguinte resultado:

3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

Deixe-nos mostrar o conteúdo do arquivo.

[jerry]$ cat Tolkien.txt

Ao executar o código acima, você obtém o seguinte resultado:

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432

Excelente! Obtivemos o resultado esperado. SED é realmente um utilitário incrível.

Append Command

Uma das operações mais úteis de qualquer editor de texto é fornecer funcionalidade de acréscimo. SED apóia esta operação por meio de seu comando append. A seguir está a sintaxe de append:

[address]a\ 
Append text

Vamos acrescentar uma nova entrada do livro após o número da linha 4. O exemplo a seguir mostra como fazer isso

[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Na seção de comando, 4 implica o número da linha, a é o comando anexar e a parte restante é o texto a ser anexado.

Vamos inserir uma linha de texto no final do arquivo. Para fazer isso, use$como o endereço. O exemplo a seguir ilustra isso:

[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234

Além do número da linha, também podemos especificar um endereço usando o padrão textual. Por exemplo, o exemplo a seguir acrescenta texto depois de corresponder à stringThe Alchemist.

[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
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

Observe que, se houver vários padrões correspondentes, o texto será anexado após cada correspondência. O exemplo a seguir ilustra esse cenário.

[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' 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 
7) Adultry, Paulo Coelho, 234 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 234 
6) A Game of Thrones, George R. R. Martin, 864

Comando de mudança

SED fornece change ou replacecomando que é representado por c. Este comando ajuda a substituir uma linha existente por um novo texto. Quando o intervalo de linha é fornecido, todas as linhas são substituídas como um grupo por uma única linha de texto. A seguir está a sintaxe do comando de mudança:

[address1[,address2]]c\ 
Replace text

Vamos substituir a terceira linha por algum outro texto.

[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324 
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

SED também aceita padrões como um endereço. No exemplo a seguir, uma linha é substituída quando a correspondência de padrão é bem-sucedida.

[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324 
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

O SED também permite a substituição de várias linhas por uma única linha. O exemplo a seguir remove linhas da quarta à sexta e as substitui por um novo texto.

[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324

Inserir Comando

O comando insert funciona da mesma maneira que append. A única diferença é que ele insere uma linha antes de uma posição específica. A seguir está a sintaxe do comando insert:

[address]i\ 
Insert text

Vamos entender o comando insert com alguns exemplos. O comando a seguir insere uma nova entrada antes da quarta linha.

[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' 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 
7) Adultry, Paulo Coelho, 324 
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

No exemplo acima, 4 é o número da localização, i implica o comando de inserção, e a parte restante é o texto a ser inserido.

Para inserir texto no início de um arquivo, forneça o endereço da linha como 1. O seguinte comando ilustra isso:

[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

7) Adultry, Paulo Coelho, 324
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

Além disso, podemos inserir várias linhas. O comando a seguir insere duas linhas antes da última linha.

[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324

Ao executar o código acima, você obtém o seguinte resultado:

8) Eleven Minutes, Paulo Coelho, 304' 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 
7) Adultry, Paulo Coelho, 324 
8) Eleven Minutes, Paulo Coelho, 304 
6) A Game of Thrones, George R. R. Martin, 864

Observe que as entradas a serem inseridas são inseridas em linhas separadas e delimitadas pelo caractere de barra invertida (\).

Comando Traduzir

SED fornece um comando para traduzir caracteres e é representado como y. Ele transforma os personagens por posição. A seguir está a sintaxe do comando de tradução:

[address1[,address2]]y/list-1/list-2/

Observe que a tradução é baseada na posição do personagem de list 1 para o personagem na mesma posição em list 2e ambas as listas devem ser listas de caracteres explícitos. Expressões regulares e classes de caracteres não são suportadas. Além disso, o tamanho dolist 1 e list 2 deve ser o mesmo.

O exemplo a seguir converte números arábicos em números romanos.

[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'

Ao executar o código acima, você obtém o seguinte resultado:

I V IV XX

eu comando

Você consegue diferenciar entre palavras separadas por espaços e palavras separadas por caracteres de tabulação apenas olhando para elas? Certamente não. Mas o SED pode fazer isso por você. SED usa olcomando para exibir caracteres ocultos no texto. Por exemplo, caractere de tabulação com\t e fim de linha com $personagem. Dada a seguir está a sintaxe dol comando.

[address1[,address2]]l 
[address1[,address2]]l [len]

Vamos criar um arquivo com caracteres de tabulação para demonstração. Para simplificar, vamos usar o mesmo arquivo, apenas substituindo os espaços por tabulações. Esperar! Mas como fazer isso - abrindo o arquivo em um editor de texto e substituindo cada espaço por tabulação? Certamente não! Podemos fazer uso de comandos SED para isso.

[jerry]$ sed 's/ /\t/g' books.txt > junk.txt

Agora vamos mostrar os caracteres ocultos usando o l comando:

[jerry]$ sed -n 'l' junk.txt

Ao executar o código acima, você obtém o seguinte resultado:

1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$ 
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$ 
3)\tThe\tAlchemist,Paulo\tCoelho,197$ 
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$ 
5)\tThe\tPilgrimage,Paulo\tCoelho,288$ 
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$

Como outros comandos SED, ele também aceita números de linha e padrões como um endereço. Você pode tentar por si mesmo.

Vamos dar uma olhada em outro recurso interessante do SED. Podemos instruir o SED a realizar a quebra de linha após um certo número de caracteres. O exemplo a seguir quebra as linhas após 25 caracteres.

[jerry]$ sed -n 'l 25' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

1) A Storm of Swords,Geo\ 
rge R. R. Martin,1216$ 
2) The Two Towers,J. R. \ 
R. Tolkien,352$ 
3) The Alchemist,Paulo C\ 
oelho,197$ 
4) The Fellowship of the\ 
 Ring,J. R. R. Tolkien,4\ 
32$ 
5) The Pilgrimage,Paulo \ 
Coelho,288$ 
6) A Game of Thrones,Geo\ 
rge R. R. Martin ,864$

Observe que no exemplo acima, o limite de quebra é fornecido após o comando l. Nesse caso, são 25 caracteres. Esta opção é específica do GNU e pode não funcionar com outras variantes do SED.

Um limite de quebra de 0 significa nunca quebrar a linha, a menos que haja um novo caractere de linha. O seguinte comando simples ilustra isso.

[jerry]$ sed -n 'l 0' 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$

Sair do Comando

O comando Quit instrui o SED a encerrar o fluxo de execução atual. É representado peloqcomando. A seguir está a sintaxe do comando quit:

[address]q 
[address]q [value]

Observe que o comando quit não aceita faixa de endereços, ele suporta apenas um único endereço. Por padrão, o SED segue o fluxo de trabalho de leitura, execução e repetição; mas quando o comando quit é encontrado, ele simplesmente para a execução atual.

Vamos imprimir as primeiras 3 linhas do arquivo.

[jerry]$ sed '3 q' 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

Além do número da linha, também podemos usar padrões textuais. O comando a seguir é encerrado quando a correspondência de padrão é bem-sucedida.

[jerry]$ sed '/The Alchemist/ q' 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

Além disso, o SED também pode aceitar um valueque pode ser usado como o status de saída. O comando a seguir mostra seu status de saída como 100.

[jerry]$ sed '/The Alchemist/ q 100' 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

Agora vamos verificar o status de saída.

[jerry]$ echo $?

Ao executar o código acima, você obtém o seguinte resultado:

100

Leia o comando

Podemos instruir o SED a ler o conteúdo de um arquivo e exibi-lo quando uma condição específica corresponder. O comando é representado pelo alfabetor. A seguir está a sintaxe do comando de leitura.

[address]r file

Observe que deve haver exatamente um espaço entre os r comando e o nome do arquivo.

Vamos entender isso com um exemplo simples. Crie um arquivo de amostra chamadojunk.txt.

[jerry]$ echo "This is junk text." > junk.txt

O seguinte comando instrui o SED a ler o conteúdo do junk.txt e insira-os após a terceira linha.

[jerry]$ sed '3 r junk.txt' 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 
This is junk text. 
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

No exemplo acima, 3 implica o endereço da linha, r é o nome do comando, e junk.txté o nome do arquivo cujo conteúdo deve ser exibido. Além disso, o GNU SED também aceita uma variedade de endereços. Por exemplo, o seguinte comando insere o conteúdo dejunk.txt após a terceira, quarta e quinta linhas.

[jerry]$ sed '3, 5 r junk.txt' 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 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
This is junk text. 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Como outros comandos SED, o comando de leitura também aceita padrão como endereço. Por exemplo, o seguinte comando insere o conteúdo dejunk.txt quando a correspondência de padrão for bem-sucedida.

[jerry]$ sed '/Paulo/ r junk.txt' 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 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Executar Comando

Podemos executar comandos externos do SED usando o executecomando. É representado pore. A seguir está a sintaxe do comando de execução.

[address1[,address2]]e [command]

Vamos ilustrar o comando execute com um exemplo simples. O seguinte comando SED executa o UNIXdate comando antes da terceira linha.

[jerry]$ sed '3 e date' 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 
Sun Sep  7 18:04:49 IST 2014 
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

Como outros comandos, ele também aceita padrões como um endereço. Por exemplo, o exemplo a seguir executadatecomando quando uma correspondência de padrão é bem-sucedida. Observe que após cada correspondência de padrão, primeiro o comando é executado e, em seguida, o conteúdo do buffer de padrão é exibido.

[jerry]$ sed '/Paulo/ e date' 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 
Sun Sep  7 18:06:04 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
Sun Sep  7 18:06:04 IST 2014 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Se você observar a sintaxe do e comande com cuidado, você notará que commandé opcional. Quando nenhum comando é fornecido apóse,ele trata o conteúdo do buffer de padrão como um comando externo. Para ilustrar isso, vamos criar um arquivo command.txt com alguns comandos simples.

[jerry]$ echo -e "date\ncal\nuname" > commands.txt 
[jerry]$ cat commands.txt

Ao executar o código acima, você obtém o seguinte resultado:

date 
cal 
uname

Os comandos do arquivo são autoexplicativos. Na falta decommand depois de e,O SED executa todos esses comandos um por um. O seguinte exemplo simples ilustra isso.

[jerry]$ sed 'e' commands.txt

Ao executar o código acima, você obtém o seguinte resultado:

Sun Sep  7 18:14:20 IST 2014 
   September 2014      
Su Mo Tu We Th Fr Sa   
    1  2  3  4  5  6   
 7  8  9 10 11 12 13   
14 15 16 17 18 19 20   
21 22 23 24 25 26 27   
28 29 30               
                       
Linux

Como outros comandos SED, o comando execute também aceita todos os intervalos válidos de endereços.

Comandos Diversos

Por padrão, o SED opera em uma única linha, mas também pode operar em várias linhas. Os comandos de várias linhas são indicados por letras maiúsculas. Por exemplo, ao contrário don comando, o Ncomando não limpa e imprime o espaço do padrão. Em vez disso, ele adiciona uma nova linha (\ n) no final do espaço do padrão atual e acrescenta a próxima linha do arquivo de entrada ao espaço do padrão atual e continua com o fluxo padrão do SED executando o restante dos comandos do SED. Dada a seguir está a sintaxe doN comando.

[address1[,address2]]N

Vamos imprimir uma lista separada por vírgulas de títulos de livros e seus respectivos autores. O exemplo a seguir ilustra isso.

[jerry]$ sed 'N; s/\n/, /g' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

Vamos entender como funciona o exemplo acima. oNO comando lê a primeira linha, ou seja, A Storm of Swords no buffer de padrão e acrescenta \ n seguido pela próxima linha. O espaço padrão agora contém uma tempestade de espadas\nGeorge RR Martin. Na próxima etapa, substituiremos a nova linha por uma vírgula.

Gostar p comando, temos um P comando para imprimir a primeira parte (até nova linha incorporada) do espaço padrão de várias linhas criado pelo Ncomando. Dada a seguir está a sintaxe doP comando que é semelhante ao p comando.

[address1[,address2]]P

No exemplo anterior, vimos que o Ncomando cria uma lista separada por nova linha de títulos de livros e seus autores. Vamos imprimir apenas a primeira parte, ou seja, apenas os títulos do livro. O comando a seguir ilustra isso.

[jerry]$ sed -n 'N;P' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

A Storm of Swords 
The Two Towers 
The Alchemist 
The Fellowship of the Ring 
The Pilgrimage 
A Game of Thrones

Observe que, na ausência de N, ele se comporta da mesma forma que o pcomando. O comando simples a seguir ilustra esse cenário.

[jerry]$ sed -n 'P' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones 
George R. R. Martin

Além disso, o SED também fornece um vcomando que verifica a versão. Se a versão fornecida for superior à versão SED instalada, a execução do comando falhará. Observe que esta opção é específica do GNU e pode não funcionar com outras variantes do SED. Dada a seguir está a sintaxe dov comando.

[address1[,address2]]v [version]

Primeiro, descubra a versão atual do SED.

[jerry]$ sed --version

Ao executar o código acima, você obtém o seguinte resultado:

sed (GNU sed) 4.2.2

No exemplo a seguir, a versão SED é superior à versão 4.2.2, portanto, o comando SED aborta sua execução.

[jerry]$ sed 'v 4.2.3' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

sed: -e expression #1, char 7: expected newer version of sed

Mas se a versão fornecida for menor ou igual à versão 4.2.2, o comando funcionará conforme o esperado.

[jerry]$ sed 'v 4.2.2' books.txt

Ao executar o código acima, você obtém o seguinte resultado:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones George R. R. Martin