O comando SED no Linux
- Vinicius Souza
- Linux
- 27 de dezembro de 2020
O comando SED é uma ótima ferramenta de edição de arquivos ou de formatação de resultados de comandos, com ele você pode pesquisar, localizar e substituir, inserir ou excluir palavras, números e etc. O uso mais comum do comando SED é a localização e substituição.
Imagina que tenha o arquivo nomes.txt e dentro dele existem vários nomes Marcus e você deseja trocar para Marcos, você teria que abrir o arquivo com seu editor preferido e ir substituindo, ou abrir via Sublime/ Notepad e usar o replace, mas com o SED você faz tudo isso com uma linha minúscula de comando e sem a necessidade de abrir o arquivo. O SED é capaz disso e muito mais!
O comando SED suporta expressão regular, o que permite realizar matchs de padrões complexos.
Instalação
O SED geralmente vem instalado nas distribuições mais recentes, porém caso não esteja pode instalar utilizando os comandos abaixo:
Valide se está instalado
sed --version
Output se tiver instalado:
Caso o SED não tenha instalado siga os comandos abaixo
Ubuntu/ Debian
sudo apt install sed
CentOS
sudo yum install sed
Utilização
Nestes exemplos utilizaremos um arquivo txt com vários nomes.
cat nomes.txt
Lucas Matheus Marcus Sheldon Marcus Skywalker
Matheus Sheldon Marcus Vinicius Marcus Luke
Gustavo Marcus Vinicius Marcus Marcus Skywalker
1 - Substituir uma ocorrência: Vamos trocar o nome Marcus por Marcos
sed 's/Marcus/Marcos/' nomes.txt
Resultado:
Lucas Matheus Marcos Sheldon Marcus Skywalker
Matheus Sheldon Marcos Vinicius Marcus Luke
Gustavo Marcos Vinicius Marcus Marcus Skywalker
A sintaxe especifica “s” na operação de substituição. Os “/” são delimitadores. O “Marcus” é a pesquisa e o “Marcos” é a string de substituição. Por padrão, o comando SED substitui a primeira ocorrência do padrão em cada linha.
2 - Substituindo todas as ocorrências: O sinalizador de substituição /g (substituição global) caracteriza que o comando SED irá substituir todas as ocorrências da string na linha.
sed 's/Marcus/Marcos/g' nomes.txt
Resultado:
Lucas Matheus Marcos Sheldon Marcos Skywalker
Matheus Sheldon Marcos Vinicius Marcos Luke
Gustavo Marcos Vinicius Marcos Marcos Skywalker
3 - Substituindo a string em uma linha específica: Você pode restringir o comando SED para substituir a string em uma linha específica. Neste exemplo filtramos a terceira linha
sed '3 s/Marcus/Marcos/' nomes.txt
Resultado:
Lucas Matheus Marcus Sheldon Marcus Skywalker
Matheus Sheldon Marcus Vinicius Marcus Luke
Gustavo Marcos Vinicius Marcus Marcus Skywalker
4 - Colocar uma String no início de cada linha
sed 's/^/REX /' nomes.txt
Resultado:
REX Lucas Matheus Marcus Sheldon Marcus Skywalker
REX Matheus Sheldon Marcus Vinicius Marcus Luke
REX Gustavo Marcus Vinicius Marcus Marcus Skywalker
5 - Inserir uma String no início do intervalo da linha 2 até a 3
sed '2,3 s/^/REX /' nomes.txt
Resultado:
Lucas Matheus Marcus Sheldon Marcus Skywalker
REX Matheus Sheldon Marcus Vinicius Marcus Luke
REX Gustavo Marcus Vinicius Marcus Marcus Skywalker
6 - Colocar uma String no final de cada linha
sed 's/$/ REX/' nomes.txt
Resultado:
Lucas Matheus Marcus Sheldon Marcus Skywalker REX
Matheus Sheldon Marcus Vinicius Marcus Luke REX
Gustavo Marcus Vinicius Marcus Marcus Skywalker REX
7 - Exibe as linhas que iniciam com a string ‘Matheus’
sed -n '/^Matheus/p' nomes.txt
Resultado:
Matheus Sheldon Marcus Vinicius Marcus Luke
8 - Apaga as linhas pela numeração delas. O 1 é o número da linha, se quiser apagar a segunda, utilize ‘2d’, a terceira ‘3d’ e por aí vai.
sed '1d' nomes.txt
Resultado:
Matheus Sheldon Marcus Vinicius Marcus Luke
Gustavo Marcus Vinicius Marcus Marcus Skywalker
9 - Insere uma quebra de linha entre as linhas
sed 'G' nomes.txt
Resultado:
Lucas Matheus Marcus Sheldon Marcus Skywalker
Matheus Sheldon Marcus Vinicius Marcus Luke
Gustavo Marcus Vinicius Marcus Marcus Skywalker
Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !