AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 783382
Accepted
RonJohn
RonJohn
Asked: 2024-09-12 23:58:51 +0800 CST2024-09-12 23:58:51 +0800 CST 2024-09-12 23:58:51 +0800 CST

gnu grep vários filtros em uma regex

  • 772

RHEL 8, se for importante.

Preciso encontrar todas as linhas em um arquivo de texto que correspondem a estes três filtros:

cut -f1 -d: .pgpass | grep ^FISP | grep -E 'CDS|TAP' | grep PGS401
FISPCDSPGS401A
FISPCDSPGS401B
FISPTAPPGS401AA
FISPTAPPGS401AB
FISPTAPPGS401BA
FISPTAPPGS401BB
FISPTAPPGS401CA
FISPTAPPGS401CB
FISPTAPPGS401DA
FISPTAPPGS401DB

Isso, semelhante ao globbing estendido do bash, é o tipo de comando que estou procurando, mas não corresponde.

cut -f1 -d: .pgpass | grep '^FISP@(CDS|TAP)PGS401'
cut -f1 -d: .pgpass | grep -E '^FISP@(CDS|TAP)PGS401'

Qual é o segredo?

EDIT1: todos os dados

$ cut -f1 -d: .pgpass | grep -v '^$'
FISPCDSPGS202a
FISPCDSPGS202a
FISPCDSPGS202c
FISPCDSPGS202b
FISPCDSPGS202b
FISPCDSPGS202c
FISPCDSPGS202
FISPCCPGS302a
FISPCCPGS302b
FISPCCPGS302a
FISPCCPGS302b
FISPCCPGS302c
FISPCCPGS302
FISPCDSPGS302a
FISPCDSPGS302b
FISPCDSPGS302a
FISPCDSPGS302b
FISPCDSPGS302c
FISPCDSPGS302
FISPTAPPGS302a
FISPTAPPGS302b
FISPTAPPGS302a
FISPTAPPGS302b
FISPTAPPGS302c
FISPTAPPGS302
FISPCCPGS405a
FISPCCPGS405b
FISPCCPGS405a
FISPCCPGS405b
FISPCCPGS405c
FISPCCPGS405
FISPCDSPGS405a
FISPCDSPGS405b
FISPCDSPGS405a
FISPCDSPGS405b
FISPCDSPGS405c
FISPCDSPGS405
FISPTAPPGS405a
FISPTAPPGS405b
FISPTAPPGS405a
FISPTAPPGS405b
FISPTAPPGS405c
FISPTAPPGS405
FISPCDSPGS202c
FISPCCPGS302c
FISPCDSPGS302c
FISPTAPPGS302c
FISPCCPGS405c
FISPCDSPGS405c
FISPTAPPGS405c
FISSLBXPGS202a
FISSLBXPGS202b
FISSLBXPGS302a
FISSLBXPGS302b
FISSLBXPGS405a
FISSLBXPGS405b
FISPCDSPGS401A
FISPCDSPGS401B
FISPTAPPGS401AA
FISPTAPPGS401AB
FISPTAPPGS401BA
FISPTAPPGS401BB
FISPTAPPGS401CA
FISPTAPPGS401CB
FISPTAPPGS401DA
FISPTAPPGS401DB
FISQCCPGS401A
FISQCCPGS401B
FISQCCPGS401A
FISQCCPGS401B
FISQCCPGS401C
FISQCCPGS401
FISQCDSPGS401A
FISQCDSPGS401B
FISQCDSPGS401A
FISQCDSPGS401B
FISQCDSPGS401C
FISQCDSPGS401
FISQTAPPGS401A
FISQTAPPGS401B
FISQTAPPGS401A
FISQTAPPGS401B
FISQTAPPGS401C
FISQTAPPGS401

EDIT1: "ponto e asterisco" parece não funcionar.

$ cut -f1 -d: .pgpass | grep '^FISP.*(CDS|TAP).*PGS401'
$ 
bash
  • 3 3 respostas
  • 46 Views

3 respostas

  • Voted
  1. Romeo Ninov
    2024-09-13T00:47:23+08:002024-09-13T00:47:23+08:00

    O comando que você pode usar é:

    cut -f1 -d: .pgpass | grep -E '^FISP.*(CDS|TAP).*PGS401'
    

    A pesquisa será por (regex) ^FISP.*CDS.*PGS401ou^FISP.*TAP.*PGS401

    Aqui está o resultado da execução, com base nos dados de entrada do OP:

    #  grep -E '^FISP.*(CDS|TAP).*PGS401' vv
    FISPCDSPGS401A
    FISPCDSPGS401B
    FISPTAPPGS401AA
    FISPTAPPGS401AB
    FISPTAPPGS401BA
    FISPTAPPGS401BB
    FISPTAPPGS401CA
    FISPTAPPGS401CB
    FISPTAPPGS401DA
    FISPTAPPGS401DB
    
    • 3
  2. Best Answer
    waltinator
    2024-09-13T01:00:14+08:002024-09-13T01:00:14+08:00

    Eu tentaria usar \para inverter o estado "especial"* do seu ()|s. Você pode fazer assim:

    grep '^FISP\(CDS\|TAP\)PGS401'
    
    • estado "especial": prefaciar um caractere com \o inverte de "apenas parte da string" para "especial para o analisador de expressão regular", ou vice-versa. Corresponder a um literal ^é \^.
    • 2
  3. Ed Morton
    2024-09-13T02:10:46+08:002024-09-13T02:10:46+08:00

    Pode ser isso que você está tentando fazer:

    awk -F':' '{$0=$1} /^FISP/ && /CDS|TAP/ && /PG5401/' .pgpass
    

    ou talvez:

    awk -F':' '{$0=$1} /^FISP.*(CDS|TAP).*PG5401/' .pgpass
    

    sem uma entrada de amostra clara e testável e uma saída esperada, isso é obviamente um palpite não testado.

    • 0

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve