Uso diferente do grep

0

Eu sei grep pode ser usado para fazer pesquisa parcial, por exemplo, se eu usar

echo "Enter example"
read example

echo "Enter Subject"
read subject
grep -i ^$example info.txt | grep -i ^[^,]*:$subject 

A saída será todas as linhas da string que tem, digamos, a chave em "example", ele irá mostrar todas as linhas da string que tem a string "example".

Eu preciso desta função para que o usuário possa fazer uma pesquisa geral sobre quais são as listas de materiais de leitura disponíveis no info.txt.

No momento, estou usando if statements, se $ example e $ subject tiverem informações, ele fará uma pesquisa específica, como literalmente string de correspondência de string, senão ele retornará false.

Existe alguma maneira de tornar a busca mais flexível, ou deixá-la pesquisar especificamente, como existem muitos exemplos no info.txt.

  1. Exemplo 1: Matemática básica
  2. Exemplo 2: matemática avançada
  3. Exemplo 3: Como criar um bom exemplo?

Então, se eu digitar "exemplo" e "matemática", ele retornará falso. No entanto, se eu digitar "exemplo 1" e "matemática básica", ele irá ecoar a saída. Eu perguntei por aí, a maioria dos meus amigos me recomendou a usar o awk, mas se eu fizer isso, terei que refazer todo o meu script, já que estou usando o grep na maioria das funções para fazer buscas.

Meu professor só nos ensinou grep naquele ponto do tempo, portanto, apenas entendemos o grep básico e não sabíamos sobre o awk.

    
por Zac 13.01.2015 / 15:35

1 resposta

2

Aqui está uma pequena página no shellhacks.com que mostra exemplos " Usando BASH" Grep OR / Grep E / Grep NOT "Operadores ", e tem sed & awk equivalentes. Vou colá-lo aqui, você poderia usá-los para procurar $subject e / ou / não $example , em uma determinada ordem ou em qualquer.

Usando o BASH "Grep OR / Grep e / Grep NOT "Operadores

No artigo a seguir, você encontrará vários exemplos que mostram como usar operadores OR / AND / NOT com comandos do Linux GREP / SED / AWK.

É uma tarefa bastante comum usar essas ferramentas de linha de comando do Linux como grep, sed e awk para analisar arquivos com expressões regulares .

Mostrarei como encontrar todas as linhas , que contêm qualquer um dos vários padrões , como imprimir todas as linhas em um arquivo, corresponder várias padrões e como encontrar e imprimir todas as linhas, que não correspondem a um padrão .

Operador Grep 'OR'

Encontre todas as linhas em um arquivo que correspondam a qualquer um dos seguintes padrões.

Usando o comando GREP:

grep "pattern1\|pattern2" file.txt
grep -E "pattern1|pattern2" file.txt
grep -e pattern1 -e pattern2 file.txt
egrep "pattern1|pattern2" file.txt

Usando o comando AWK:

awk '/pattern1|pattern2/' file.txt

Usando o comando SED:

sed -e '/pattern1/b' -e '/pattern2/b' -e d file.txt

Grep 'AND' Operator

Encontre e imprima todas as linhas em um arquivo que correspondam a vários padrões.

Usando o comando GREP:

grep -E 'pattern1.*pattern2' file.txt # in that order
grep -E 'pattern1.*pattern2|pattern2.*pattern1' file.txt # in any order
grep 'pattern1' file.txt | grep 'pattern2' # in any order

Usando o comando AWK:

awk '/pattern1.*pattern2/' file.txt # in that order
awk '/pattern1/ && /pattern2/' file.txt # in any order

Usando o comando SED:

sed '/pattern1.*pattern2/!d' file.txt # in that order
sed '/pattern1/!d; /pattern2/!d' file.txt # in any order

Grep 'NÃO' Operador

Encontre e imprima todas as linhas que não correspondem a um padrão.

Usando o comando GREP:

grep -v 'pattern1' file.txt

Usando o comando AWK:

awk '!/pattern1/' file.txt

Usando o comando SED:

sed -n '/pattern1/!p' file.txt

Aqui está um link para o manual do Grep do GNU . Ele tem muitas informações boas, inclusive sobre Expressões regulares e alguns exemplos de uso .

Esta página é uma "cola" no RegEx .

    
por 13.01.2015 / 16:13

Tags