Extrair linhas com regex
Em um log com linhas INFO, WARN e ERROR, a expressão ^ERROR\b deixa só as 2 linhas de erro de 4, sem mudanças e na ordem. Cada linha é testada sozinha, então um curinga nunca invade o registro seguinte. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Padrão
- ^ERROR\b
- Resultado
- ERROR database unavailable ERROR request timed out
- Correspondências
- 2
- Total de linhas
- 4
Extraia linhas correspondentes a uma expressão regular quando um log extenso, relatório, despejo de configuração ou texto estruturado tiver muito mais informação do que você precisa. Envie o texto, um padrão regex de JavaScript e flags opcionais; a capacidade testa cada linha completa e devolve apenas as correspondências na ordem original. Ela aceita terminações LF, CRLF e CR, preserva o conteúdo das linhas selecionadas e informa tanto a quantidade encontrada quanto o total examinado. O processamento é determinístico e local, sem modelo ou dependência de rede.
Escreva um padrão para as linhas que você realmente deseja
O padrão é aplicado separadamente a cada linha completa, o que torna as âncoras especialmente úteis. Comece com ^ quando o termo relevante precisar aparecer no início da linha e termine com $ quando os caracteres finais forem importantes. Por exemplo, ^ERROR\b seleciona registros convencionais de erro sem aceitar um rótulo como ERRORS, enquanto \.csv$ mantém nomes de arquivo terminados nessa extensão.
Forneça o código-fonte da expressão regular, e não a notação com barras: digite ^WARN, não /^WARN/. As flags opcionais de JavaScript são informadas em separado. A flag i ignora diferenças entre maiúsculas e minúsculas; as demais mantêm o significado padrão do JavaScript.
Cada linha selecionada volta inalterada e preserva sua posição relativa. As linhas sem correspondência desaparecem, mas a ferramenta não remove espaços, reescreve, ordena, elimina duplicatas nem interpreta o conteúdo. Esse contrato específico beneficia a automação porque entrega um subconjunto previsível da origem, em vez de um resumo capaz de omitir evidências importantes.
Filtre logs e texto estruturado sem alterar as evidências
A filtragem orientada por linhas combina naturalmente com logs de aplicações, saídas de comandos, exportações delimitadas, relatórios de testes e arquivos de configuração. Uma pessoa de suporte pode isolar identificadores de solicitação, códigos de status ou níveis de gravidade antes de anexar um trecho conciso a um incidente. Uma pessoa desenvolvedora pode manter as asserções com falha de uma execução longa.
Um pipeline operacional pode selecionar registros cujos horários, nomes de host ou prefixos de componente sigam uma convenção conhecida. Como o teste ocorre em uma linha por vez, um curinga não alcança acidentalmente o registro seguinte. São reconhecidos limites LF, CRLF do Windows e CR isolado; o texto retornado usa separadores LF estáveis para que comparações posteriores sejam consistentes entre plataformas.
Linhas vazias podem ser escolhidas deliberadamente com ^$. Uma quebra final é tratada como terminador, e não como registro vazio adicional. Além do resultado unido, a resposta traz um array das linhas selecionadas e contagens de correspondências e linhas totais, oferecendo dados convenientes e verificações úteis sem outra etapa de análise.
Valide padrões e integre o resultado com segurança
A capacidade rejeita texto ausente ou vazio, padrões ausentes ou vazios, flags não aceitas ou duplicadas, modos Unicode incompatíveis e expressões que o mecanismo JavaScript não consegue compilar. Uma resposta válida sem correspondências continua útil: contém resultado vazio, array de linhas vazio, contagem encontrada igual a zero e o número de linhas inspecionadas. O texto e o padrão têm limites para manter o consumo de memória previsível no worker de borda e no navegador gratuito.
Ao montar um pipeline, teste cada expressão nova com amostras representativas, use âncoras quando o formato permitir e evite repetições aninhadas desnecessariamente ambíguas. Sem rede, aleatoriedade, relógio ou modelo de linguagem, entradas idênticas geram saídas idênticas.
Casos de uso
Isolar entradas de erro
Mantenha somente linhas iniciadas por uma gravidade de erro ou contendo um identificador de solicitação antes da análise do incidente.
Selecionar registros estruturados
Extraia linhas cujos prefixos, status, nomes de arquivo ou identificadores atendam a uma expressão regular precisa.
Reduzir a saída de testes
Preserve asserções com falha e marcadores de diagnóstico de um log de build extenso sem alterar a ordem original.
Perguntas frequentes
Devo colocar barras ao redor da expressão regular?
Não. Envie apenas o padrão, como ^ERROR\b. Informe flags como i no campo separado de flags.
O padrão é executado em cada linha ou no texto inteiro?
Ele é executado independentemente em cada linha completa. Uma linha é devolvida uma vez quando há correspondência em qualquer posição.
As linhas correspondentes são modificadas?
Não. Os caracteres e a ordem são preservados. Apenas os separadores do resultado unido são normalizados para LF.
Quanto custa?
Você pode executar gratuitamente a mesma filtragem determinística no navegador.
Como faço para ignorar a diferença entre maiúsculas e minúsculas?
Adicione a opção i, que é informada separadamente da expressão. Com ela, ^error também mantém as linhas que começam com ERROR ou Error. As demais opções comuns de expressões regulares mantêm o significado habitual.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/str/extract-lines-matching \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}'const res = await fetch("https://api.kit.forhosting.com/str/extract-lines-matching", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/extract-lines-matching",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/extract-lines-matching", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"INFO server started\\nERROR database unavailable\\nWARN retrying\\nERROR request timed out","pattern":"^ERROR\\\\b"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out","pattern":"^ERROR\\b"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/extract-lines-matching", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "INFO server started\nERROR database unavailable\nWARN retrying\nERROR request timed out",
"pattern": "^ERROR\\b"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.extract_lines_matching",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Use a ferramenta no navegador para uma investigação rápida ou chame a API por US$ 0,002 por solicitação bem-sucedida.
Valide padrões e integre o resultado com segurança
Esses casos retornam invalid_input em vez de produzir silenciosamente um resultado vazio, permitindo distinguir um erro de digitação em uma regra automática de um padrão válido que não encontrou nada. Consuma o array quando precisar de JSON estruturado ou o resultado unido ao encaminhar o texto filtrado a um arquivo, chamado ou outro comando. A automação pela API custa US$ 0,002 por solicitação bem-sucedida; o navegador é gratuito.
Perguntas técnicas
O que acontece quando nenhuma linha corresponde?
A solicitação termina com sucesso, resultado e array vazios, matched_count igual a zero e total_lines com a quantidade inspecionada.