- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Capturar uma determina cadeia de caracteres em qualquer posição é um tarefa relativamente simples; onde basicamente podemos utilizar as seguintes expressões:
.*palavra.* ou palavra
Porém, tenho um caso especifico onde preciso capturar uma cadeia de caracteres em qualquer posição, exceto se a mesma estiver sozinha.
Vou explicar;
Eu tenho arquivo de texto com milhares de itens cadastrados, onde há itens comuns e itens com selo ISO9001 que é um selo de qualidade do produto; separei algumas linhas em um arquivo chamado produtos.txt, segue o conteúdo.
produtos.txt
furadeiraISO9001
ISO9001lixadeira
parafusadeira
broca
maquitaISO9001diamantada
ISO9001
capaceteISO900
ISO9001
ISO9001lixadeira
parafusadeira
broca
maquitaISO9001diamantada
ISO9001
capaceteISO900
ISO9001
Você pode observar que os produtos que possuem o selo de qualidade tem a nomenclatura ISO9001 junto com o nome do produto, que podem variar de posição; também há produtos sem e linhas com o selo somente.
O que eu quero é as linhas com os produtos que tenham o selo ISO9001.
Vou utilizar a expressão gulosa '.*texto.*'.
$ cat produtos.txt | egrep '.*ISO9001.*'.
furadeiraISO9001
ISO9001lixadeira
maquitaISO9001diamantada
ISO9001
ISO9001
furadeiraISO9001
ISO9001lixadeira
maquitaISO9001diamantada
ISO9001
ISO9001
Dessa forma, o padrão 'ISO9001' casa em todas as posições, porém não faz distinção de linhas que contém ou não o produto.
Para capturar corretamente montei a seguinte regex:
'\w*ISO9001\w+|\w+ISO9001\w*'
Criei dois padrões separados por (|) OU.
1º padrão
Quero qualquer caractere a-zA-Z0-9_ que apareça zero ou mais vezes seguido do selo ISO9001 mais uma cadeia a-zA-Z0-9_ que apareça uma ou mais vezes.
2ª padrão
É o 1ª padrão na ordem reversa, criando todas as combinações de posição.
Vamos testar.
cat produtos.txt | egrep '\w*ISO9001\w+|\w+ISO9001\w*'
furadeiraISO9001
ISO9001lixadeira
maquitaISO9001diamantada
furadeiraISO9001
ISO9001lixadeira
maquitaISO9001diamantada
Funcionou !!! Somente as linhas com os produtos com selo de qualidade foram retornadas.
Comentários
Postar um comentário