Shell Scripting - Comando read - Ler dados do teclado e de arquivos - 26
Índice:
- Lendo uma sintaxe de linha por linha de arquivo
- Lendo um arquivo Linha por linha
- Métodos alternativos de leitura de arquivos
- Usando uma substituição de processo
- Usando uma String Here
- Usando o descritor de arquivo
- Conclusão
Ao escrever scripts Bash, às vezes você se encontra em situações em que precisa ler um arquivo linha por linha. Por exemplo, você pode ter um arquivo de texto contendo dados que devem ser processados pelo script.
Neste tutorial, discutiremos como ler um arquivo linha por linha no Bash.
Lendo uma sintaxe de linha por linha de arquivo
A sintaxe mais geral para ler um arquivo linha por linha é a seguinte:
while IFS= read -r line do echo "$line" done < input_file
ou a versão equivalente de linha única:
while IFS= read -r line; do echo $line; done < input_file
Como funciona?
O arquivo de entrada (
input_file
entrada) é o nome do arquivo que você deseja abrir para leitura pelo comando
read
. O comando
read
lê o arquivo linha por linha, atribuindo cada linha à variável de
line
. Depois que todas as linhas forem processadas, o loop while será encerrado. O separador de campo interno (
IFS
) é definido como a cadeia nula para preservar os espaços em branco iniciais e finais, que é o comportamento padrão do comando
read
.
Lendo um arquivo Linha por linha
Vamos dar uma olhada no exemplo a seguir. Suponha que tenhamos um arquivo chamado
distros.txt
contém uma lista de algumas das distribuições Linux mais populares e seus gerenciadores de pacotes separados por vírgula (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Para ler o arquivo linha por linha, você executaria o seguinte código no seu terminal:
while IFS= read -r line do echo "$line" done < distros.txt
O código lerá o arquivo por linha, atribuirá cada linha a uma variável e ecoará a variável. Basicidade, você veria a mesma saída como se exibisse o conteúdo do arquivo usando o comando cat.
E se você quiser imprimir apenas as distribuições que usam o apt? Uma maneira seria usar a instrução if e verificar se a linha contém a substring apt:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Ao ler o arquivo linha por linha, você também pode passar mais de uma variável para o comando read, que dividirá a linha em campos com base no
IFS
. O primeiro campo é atribuído à primeira variável, o segundo à segunda variável e assim por diante. Se houver mais campos do que variáveis, os campos restantes serão atribuídos à última variável.
No exemplo a seguir, estamos definindo o IFS como vírgula (
,
) e passando duas variáveis
distro
e
pm
para o comando read. Tudo, desde o início da linha até a primeira vírgula será atribuído à primeira variável (
distro
) e o restante da linha será atribuído à segunda variável (
pm
):
while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt
apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora
Métodos alternativos de leitura de arquivos
Usando uma substituição de processo
A substituição do processo permite passar a saída do comando como um nome de arquivo:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Usando uma String Here
Here String é uma variante do documento Here. A string
(cat input_file)
manterá as novas linhas:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Usando o descritor de arquivo
Você também pode fornecer a entrada para o loop usando um descritor de arquivo:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Ao trabalhar com descritores de arquivos, use um número entre 4 e 9 para evitar conflitos com os descritores de arquivos internos do shell.
Conclusão
No Bash, podemos ler um arquivo linha por linha, fornecendo o nome do arquivo como uma entrada para um loop de leitura while.
terminal bashA Toshiba começará a produção em massa de uma nova linha de unidades de disco híbrido equipadas com A Toshiba anunciou nesta terça-feira que começará em breve a produção em massa de uma nova linha de drives híbridos equipados com memória flash, divulgando-os como um substituto de baixo custo para os drives de estado sólido usados em ultrabooks e laptops. > As unidades híbridas são apontadas como uma maneira de obter as altas velocidades de inicialização e inicialização do SSD, ao mesmo tempo e
"Nosso alvo número um é o mercado de laptops. "Vamos vender os híbridos a um preço que está próximo dos discos rígidos padrão", disse o porta-voz da empresa, Atsushi Ido.
Como extrair arquivo CAB usando ferramentas de linha de comando no Windows 10/8/7
Você pode descompactar um ou arquivos de gabinetes .CAB mais compactados usando ferramentas de linha de comando do Windows como expand.exe, makecab & extrac32.
Como verificar se existe um arquivo ou diretório no bash
Muitas vezes, ao escrever scripts do Shell, você pode encontrar uma situação em que precisa executar uma ação com base na existência ou não de um arquivo. No Bash, você pode usar o comando test para verificar se existe um arquivo e determinar o tipo do arquivo.