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 / 463918
Accepted
Mauricio Reyes
Mauricio Reyes
Asked: 2018-08-22 08:54:00 +0800 CST2018-08-22 08:54:00 +0800 CST 2018-08-22 08:54:00 +0800 CST

Como pesquisar cada ocorrência em um arquivo de texto Linux?

  • 772

Tenho 23 strings para pesquisar, quero que retorne aquelas que estão no arquivo.

Peguei o código abaixo:

users='User1\|User2\|User3\|User4\|User5\|User6\|User7\|User8\|User9\|User10\|User11\|User12..User23'

Saída desejada:

User1 is in the file
User2 is not in the file
...
User 23 is in the file

Não tenho ideia de como fazer, estava pensando em um array mas, quero algumas dicas se for possível. Desde já, obrigado.

linux text-processing
  • 4 4 respostas
  • 202 Views

4 respostas

  • Voted
  1. DopeGhoti
    2018-08-22T09:07:13+08:002018-08-22T09:07:13+08:00

    Use uma matriz:

    users=(User1 User2 User3 User4) # et cetera
    for i in "${users[@]}"; do
        echo -n "$user is "
        if grep -q "$user" inputfile; then
            echo "present"
        else
            echo "not present"
        fi
    done
    

    grep -qexecutará a pesquisa, mas não retornará nenhuma saída, permitindo que você a use silenciosamente em um ifteste.

    Alternativamente, você pode colocar cada usuário on-line em um arquivo chamado Users, e então:

    grep -o -f Users inputfile
    

    Isso produzirá uma lista de todos os usuários vistos. Se você quiser ver os usuários presentes e ausentes, você pode:

    echo "Users present:"
    grep -o -f Users inputfile
    echo "Users absent:"
    grep -vo -f Users inputfile
    
    • 4
  2. Best Answer
    Siva
    2018-08-22T09:01:52+08:002018-08-22T09:01:52+08:00

    Tente isso,

    users=( User1 User2 User3 User4 )
    for i in "${users[@]}"
    do
       grep -qw $i file && echo "$i is in the file" || echo "$i is not in the file"
    done
    

    De man:

    -q, --silencioso, --silencioso

    Tranquilo; não escreva nada na saída padrão. Saia imediatamente com status zero se alguma correspondência for encontrada, mesmo que um erro tenha sido detectado.

    • 2
  3. steve
    2018-08-22T12:06:27+08:002018-08-22T12:06:27+08:00

    Mais um ajuste.

    users=( User1 User2 User3 User4 )
    for i in "${users[@]}"
    do
       echo "$i is" $(grep -qw $i file || echo "not") "in the file"
    done
    
    • 1
  4. glenn jackman
    2018-08-22T12:31:44+08:002018-08-22T12:31:44+08:00

    Com apenas uma única varredura no arquivo: isso é bash

    # the array of user names
    users=( User{1..23} )
    # an array of grep options: ( -e User1 -e User2 ...)
    for u in "${users[@]}"; do grep_opts+=( -e "$u" ); done
    # scan the input file and save the user names that are present in the file
    readarray -t users_present < <(grep -Fo "${grep_opts[@]}" input | sort -u)
    # find the user names absent from the file
    # this assumes there are no spaces in any of the user names.
    for u in "${users[@]}"; do
         [[ " ${users_present[*]} " == *" $u "* ]] || users_absent+=( "$u" )
    done
    # and print out the results
    printf "%s is in the file\n" "${users_present[@]}"
    printf "%s is NOT in the file\n" "${users_absent[@]}"
    
    • 1

relate perguntas

  • Subtraindo a mesma coluna entre duas linhas no awk

  • Embaralhamento de arquivo de várias linhas

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

  • como posso alterar o caso do caractere (de baixo para cima e vice-versa)? ao mesmo tempo [duplicado]

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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