SHELL wget Download de Arquivo via Linha de Comando

# baixar com o nome padrão phpunit-9.phar
wget https://phar.phpunit.de/phpunit-9.phar

# baixar e renomear para o nome phpunit
wget -O phpunit https://phar.phpunit.de/phpunit-9.phar

# qualquer endereço http pode ser o alvo para download
wget -O my-project https://mega.nz/file/<mega-nz-download-hash-with-password-embedded>

Parece básico, mas fazer o download de arquivos da internet sem usar um navegador pode ser uma tarefa árdua e desconhecida para a maioria dos usuários da internet.

Porém para desenvolvedores web, engenheiros de software e profissionais de tecnologia da informação dominar essa habilidade deve ser primordial.

O pacote wget é extremamente simples e versátil, pelo menos o seu uso básico não apresenta nenhuma dificuldade como podemos evidenciar acima. Para ambientes Linux ele já vem previamente instalado, ou se necessário pode ser facilmente instalado pelos gerenciadores de pacote.

sudo apt install wget -y      [On Debian, Ubuntu and Mint]
sudo yum install wget -y      [On RHEL/CentOS/Fedora]
sudo emerge -a net-misc/wget  [On Gentoo Linux]
sudo pacman -Sy wget          [On Arch Linux]
sudo zypper install wget      [On OpenSUSE] 

Para usuários MacOS o recurso pode ser instalado pelo gerenciador de pacotes brew.

brew install wget

Ou então, se o seu caso de uso é realmente básico você pode optar pelo uso do CURL, que vai funcionar mesmo no OSX nativamente.

# baixar com o nome padrão phpunit-9.phar
curl -O https://phar.phpunit.de/phpunit-9.phar

# baixar e renomear para o nome phpunit
curl https://phar.phpunit.de/phpunit-9.phar -o phpunit

O wget possui muitas outras funcionalidades mais avançadas, mas a ideia aqui é demonstrar o caso de uso simples mesmo.

Agora você já sabe, baixaki nunca mais!

Stream Editor sed Substituir texto \n por Quebra de Linha via Linha de Comando

#linux
sed -i 's/\\n/\n/g' linefeed.sql

#macOS
sed -i '' 's/\\n/\n/g' linefeed.sql

Hoje novamente me deparei com um bloco de texto de linha única, ou seja as quebras de linha foram geradas como string texto \n e não como o caracter linefeed ou carriage return como eu esperava.

Bom, não importa, isso acontece eventualmente então fazer a substituição manual via comando sed é a forma mais rápida de alcançar este objetivo.

Explicando rapidamente o comandos acima…

sed é o acrônimo para Stream Editor

-i significa in place, ou seja, vai alterar o próprio arquivo de entrada

's/\\n/\n/g' é um regex pattern, s para substituir, \\n conteúdo a ser substituído, \n conteúdo a ser aplicado, g troca global ou múltiplas ocorrências.

As barras / funcionam apenas como delimitadores do regex pattern.

linefeed.txt é o nome do arquivo de entrada, ou seja o nosso arquivo alvo 

Observe que no ambiente MacOS temos uma ligeira diferença onde um parâmetro adicional surge antes do regex pattern. Deu muiiiiiiito trabalho pra descobrir isso!

Criando o arquivo com o conteúdo necessário para simular o problema.

echo 'CREATE TABLE usuario (\\n id BIGINT(20) NOT NULL AUTO_INCREMENT,\\n nome VARCHAR(255) NOT NULL,\\n login VARCHAR(50) NOT NULL,\\n email VARCHAR(255) NOT NULL,\\n senha VARCHAR(50) NOT NULL,\\n telefone_fixo VARCHAR(50) DEFAULT NULL,\\n telefone_celular VARCHAR(50) DEFAULT NULL,\\n timezone VARCHAR(100) DEFAULT NULL,\\n ativo TINYINT(3) UNSIGNED NOT NULL,\\n created_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),\\n updated_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),\\n PRIMARY KEY (id),\\n UNIQUE KEY ixu_login (login),\\n KEY idx_usuario_created_at (created_at),\\n KEY idx_usuario_updated_at (updated_at)\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;' > linefeed.sql

Listando e conferindo que temos apenas uma única linha no arquivo.

cat linefeed.sql

Para os amantes do editor vi podemos fazer essa mesma substituição com a seguinte sequência de comandos.

vi linefeed.sql
:1,$ s/\\n/\r/g <enter>
:wq

Observe que neste comando o conteúdo a ser aplicado deve ser \r e não \n

É claro que você poderia se livrar de toda essa parafernália de comandos e simplesmente utilizar um editor de textos que tenha um suporte esperto, como Notepad++ ou VsCode, e simplesmente Localizar e Substituir strings por LF CR.

Mas fica aqui a minha pergunta. Por que você iria querer isto?

Thanks for watching!!!