Lê linhas e combina com padrão

2

Eu não consigo descobrir isso. Eu preciso olhar para cada linha no arquivo e verificar se é a palavra correspondente que é dada na variável

Eu comecei pelo comando read, mas não sei o que devo usar depois disso, eu tentei grep mas provavelmente usei errado.

while read line; do 
if [ $condition  ] ;then echo "ok" fi
done<file.txt
    
por applenic 17.03.2015 / 21:04

3 respostas

4

Aqui está uma rapidinha para você, simplesmente o que estamos fazendo é

Linha 1: durante a leitura do arquivo na variável line

Linha 2: corresponde a um regex, ecoa o $line se a palavra "pássaro" coincidir com aquela linha. Faça as ações que precisar aqui, nesta declaração if.

Linha 3: fim do loop while, que canaliza no arquivo foo.text

#!/bin/bash
while read line; do
  if [[ $line =~ bird ]] ; then echo $line; fi
done <foo.text

Note que "pássaro" é um regex. Para que você possa substituí-lo por exemplo: bird.*word para corresponder à mesma linha com uma expressão regular.

Experimente com um arquivo como esse, chamado foo.text com o conteúdo:

my dog is brown
her cat is white
the bird is the word
    
por 17.03.2015 / 21:23
2

A maneira mais fácil de fazer isso é usar grep (ou egrep ).

grep bird file.txt
    
por 17.03.2015 / 22:58
0

Aqui está um script simples que passa em dois argumentos (nome do arquivo e variável) ... Há também uma versão codificada abaixo ... espero que isso ajude

#!/bin/bash

[ $# -lt 2 ] && echo "wrong number of args" && exit 1
file=$1
var=$2
while read line; do
    if  echo "$line" | grep -q "$var"; then echo "ok"; fi
done < "$file"
exit 0

[user@myserver ~]$ myscript file.txt some_text

Alternativamente, se você preferir codificar o arquivo (e a variável)  em vez de passar como argumentos ...

while read line; do
    if  echo "$line" | grep -q "some_text"; then echo "ok"; fi
done < file.txt
    
por 12.05.2016 / 18:09

Tags