Você pode usar o comando read
para ler o arquivo linha por linha. Por exemplo:
while read -r line
do
[[ $line = 'syntax error at or near "?" at character 1' ]] && printf '%s\n' "$line"
done < file1.txt
Eu preciso ler um arquivo de texto linha por linha e as linhas não são constantes, pode variar.Por exemplo
$ cat file1.txt
syntax error at or near "?" at character 1
syntax error at or near "[" at character 1
syntax error at or near "," at character 1
syntax error at or near "desc" at character 1
syntax error at or near "describtion" at character 1 '
Depois de ler essa linha, ela deve passar automaticamente para o comando grep e me fornecer o conjunto de resultados. Desde o número de linhas & os erros capturados no arquivo de texto não são previsíveis. Tudo precisa ser feito automaticamente
$ find file1.txt | xargs grep 'syntax error at or near "?" at character 1' | tail -1
Como posso colocar a segunda linha, terceira linha ... nth linha & automatizá-lo no script de shell.
Você pode usar o comando read
para ler o arquivo linha por linha. Por exemplo:
while read -r line
do
[[ $line = 'syntax error at or near "?" at character 1' ]] && printf '%s\n' "$line"
done < file1.txt
Se eu entendi corretamente, você quer que grep
opere nas linhas 1 para n apenas.
Para este propósito, você pode usar a ferramenta head
:
head -n 20 your_file | grep ...
Isso fará o grep
operar nas primeiras 20 linhas de your_file
. Substitua 20 pelo n relevante para você.
Uma interpretação alternativa e resposta
Ocorreu-me que pode querer dizer que file1.txt
contém padrões que gostariam de que grep
tentasse corresponder. Se for , você deseja a opção -f
para grep
:
grep -f file1.txt files_you_want_to_search
A opção -f
informa grep
para obter seus padrões de file1.txt
, onde assume um padrão por linha (como você mostra em sua postagem). Nesses casos, você também pode adicionar a opção -F
para garantir que os metacaracteres de expressão regular no arquivo não recebam o significado especial, mas sejam interpretados literalmente:
grep -Ff file1.txt files_you_want_to_search
Com base nos seus esclarecimentos em vários comentários, parece que você deve usar a opção -f
do grep para ler uma lista de padrões diretamente do arquivo
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty file
contains zero patterns, and therefore matches nothing. (-f is
specified by POSIX.)
Você pode adicionar -F
para forçar a interpretação como sequências literais ("fixas"), a menos que o arquivo contenha padrões de expressão regulares, por exemplo,
grep -Ff file_of_lines file_to_search_for_those_lines
O resultado será uma lista de todas as linhas em file_to_search_for_those_lines
que correspondem a qualquer uma das strings em file_of_lines
.
Tags shell-script