Opção Linux Grep No Bininary
Grep - Unix, Linux Command Recurse nos diretórios ignoram o padrão de correspondência de arquivos. Suprima mensagens de erro sobre arquivos inexistentes ou ilegíveis. Nota de portabilidade: ao contrário do GNU grep. O grep tradicional não era compatível com o POSIX.2, porque o tradicional grep não tinha uma opção - q e sua opção - s comportada como a opção GNU grep rsquos - q. Os scripts de shell destinados a serem portáteis para grep tradicional devem evitar - q e - s e devem redirecionar a saída para devnull em vez disso. Trate o (s) arquivo (s) como binário. Por padrão, em MS-DOS e MS-Windows, grep adivinha o tipo de arquivo, observando o conteúdo das primeiras 32 KB lidas a partir do arquivo. Se o grep decidir que o arquivo é um arquivo de texto, ele tira os caracteres CR do conteúdo original do arquivo (para fazer expressões regulares e funcionar corretamente). Especificar - U anula esta adivinhação, fazendo com que todos os arquivos sejam lidos e passados para o mecanismo correspondente, se o arquivo for um arquivo de texto com pares CRLF no final de cada linha, isso fará com que algumas expressões regulares falhem. Esta opção não tem efeito em plataformas diferentes de MS-DOS e MS-Windows. Relatar compensações de bytes de estilo Unix. Essa opção faz com que o grep relate os deslocamentos de bytes como se o arquivo fosse um arquivo de texto de estilo Unix, ou seja, com caracteres CR despojados. Isso produzirá resultados idênticos ao funcionamento do grep em uma máquina Unix. Esta opção não tem efeito se a opção - b também for usada, não tem efeito em plataformas diferentes de MS-DOS e MS-Windows. Imprima o número da versão do grep para o erro padrão. Este número de versão deve ser incluído em todos os relatórios de erros (veja abaixo). Inverta a sensação de correspondência, para selecionar linhas não correspondentes. Selecione apenas as linhas que contenham fósforos que formam palavras inteiras. O teste é que a substring correspondente deve estar no início da linha ou ser precedida de um caracter não constitucional de palavras. Da mesma forma, deve ser no final da linha ou seguido por um caracter não constitutivo de palavras. Os caracteres constituintes do Word são letras, dígitos e sublinhado. Selecione apenas as correspondências que correspondem exatamente à linha inteira. Sinônimo obsoleto para - i. Saída de um byte zero (o caracter ASUL NUL) em vez do caractere que normalmente segue um nome de arquivo. Por exemplo, grep - lZ produz um byte zero após cada nome de arquivo em vez da linha nova usual. Esta opção torna a saída inequívoca, mesmo na presença de nomes de arquivos que contenham caracteres incomuns como linhas novas. Esta opção pode ser usada com comandos como find - print0. Perl -0. Classifique - z. E xargs -0 para processar nomes de arquivos arbitrários, mesmo aqueles que contêm caracteres de nova linha. Para Procurar a string fornecida em um único arquivo test. sh cat test. sh binbash fun () echo Esta é uma prova. Terminar o nosso script shell com a saída de sucesso saída 1 do arquivo acima grep exit: grep exit demofile Para Verificar a string dada em vários arquivos: neste caso test. sh e test1.sh cat test. sh binbash fun () echo Este é um teste. Terminar o nosso script shell com mensagem de sucesso saída 1 cat test1.sh binbash fun () echo Este é um teste1. Terminar o nosso script shell com a saída de sucesso exit 0 grep sair em ambos os arquivos test. sh e test1.sh: test1.sh: sair de 0 test. sh: sair 1 para pesquisa insensível de maiúsculas e minúsculas usando grep - i, adicionado EXIT em test1.sh cat Test1.sh binbash fun () echo Este é um teste1. Terminar o nosso script shell com mensagem de sucesso, SAIR com 0 exit 0 grep sair test1.sh test1.sh: sair de 0 grep - i sair teste test1.sh: Terminar o nosso script shell com mensagem de sucesso, EXIT com 0 test1.sh: sair de 0 Duas linhas com a opção - i, como insensível a maiúsculas e minúsculas. Posso gerar o seguinte arquivo binário: E digo, eu quero encontrar as localizações de todos os zeros (0x00), usando uma sintaxe tipo grep. O melhor que posso fazer até agora é: no entanto, isso converte implicitamente cada byte no arquivo binário original em uma representação ASCII de vários bytes, na qual o grep opera não exatamente o principal exemplo de otimização :) Existe algo como um grep binário para Linux Possivelmente, também, algo que suporta uma sintaxe de expressão regular, mas também para caracteres de bytes - ou seja, eu poderia escrever algo como um (x00) b e combinar zero ou mais ocorrências de byte 0 entre bytes a (97) E b (98) EDITAR: O contexto é que estou trabalhando em um driver, onde eu capture dados de 8 bits, algo está errado nos dados, que podem ser kilobytes até megabytes, e gostaria de verificar assinaturas específicas e onde eles ocorrer. (Até agora, estou trabalhando com trechos de kilobytes, então a otimização não é tão importante - mas se eu começar a receber alguns erros em megabytes de longas capturas, e eu preciso analisar essas, acho que gostaria de algo mais otimizado :). E especialmente, eu gosto de algo onde eu posso grep para um byte como um personagem - hexdump me obriga a procurar strings por byte) EDIT3: Graças à resposta do tchrist, aqui também é um exemplo com gafanhoto e correspondência, e exibindo resultados (embora Não é a mesma pergunta que OP): para que os dados correspondentes sejam agrupados como um byte (dois caracteres hexadecimais) cada, em seguida H2 H2 H2. Precisa ser especificado para tantos bytes na cadeia correspondente como minha correspondência. 000xCC000. Cobre 17 bytes, posso escrever H2x17 em Perl. Cada um desses H2 retornará uma variável separada (como em uma lista), então a junção também precisa ser usada para adicionar espaços entre elas - eventualmente: Bem. De fato, Perl é uma facilidade de hospedagem binária muito legal, devo admitir :) Contanto que se aprenda a sintaxe corretamente :) perguntou 14 de novembro 10 às 22:31 Como um aplicaria isso a cadeias binárias arbitrárias Eu tentei seu perl - ln0777e 39print pos (), Enquanto que 47illegal47g39 47usr47bin47awk abordagem para encontrar conteúdo perdido em um arquivo de dispositivo de disco bruto, mas perl barfed em mim com quotOut de memória em meio caminho. Ndash fuzzyTew 9 de dezembro 16 às 14:12 Uma maneira de resolver seu problema imediato usando apenas grep é criar um arquivo contendo um único byte nulo. Depois disso, grep - abo - f nullbytefile targetfile produzirá a seguinte saída. Isso é, claro, cada byte de deslocamento conforme solicitado por - b seguido por um byte nulo como solicitado por - o Id seja o primeiro a defender perl, mas neste caso não há necessidade de trazer a família estendida. Linux e comando grep Unix grep . Que significa impressão de expressão regular global, processa linha de texto por linha e imprime todas as linhas que correspondem a um padrão especificado. Sintaxe grep A Grep é uma poderosa ferramenta para combinar uma expressão regular contra texto em um arquivo, vários arquivos ou um fluxo de entrada. Ele procura o padrão de texto que você especifica na linha de comando e exibe os resultados para você. Exemplo de uso Digamos queremos localizar rapidamente a frase nossos produtos em arquivos HTML em sua máquina. Comece pesquisando um único arquivo. Aqui, nosso PATTERN é nossos produtos e nosso arquivo é product-listing. html. Uma única linha foi encontrada contendo nosso padrão, e grep exibe toda a linha de correspondência para o terminal. A linha é maior do que a largura de nosso terminal, de modo que o texto envolve as seguintes linhas, mas esta saída corresponde exatamente a uma linha em nosso arquivo. Nota: O PATTERN é interpretado por grep como uma expressão regular. No exemplo acima, todos os caracteres que usamos (letras e um espaço) são interpretados literalmente em expressões regulares, então somente a frase exata será combinada. Outros caracteres têm significados especiais, no entanto, mdash algumas marcas de pontuação, por exemplo. Para obter mais informações, consulte a Referência Rápida de Expressão Regular. Visualizando a saída do grep em cores Se usarmos a opção --color, nossas correspondências bem-sucedidas serão destacadas para nós: Visualizando números de linhas de correspondências bem sucedidas Será ainda mais útil se nós sabermos onde a linha correspondente aparece em nosso arquivo. Se especificarmos a opção - n, o grep prefixará cada linha correspondente com o número da linha: nossa linha correspondente é prefixada com 18: o que nos diz que isso corresponde à linha 18 em nosso arquivo. Executando buscas grep insensíveis a maiúsculas e minúsculas Se, se os nossos produtos aparecerem no início de uma frase, ou aparecerem em maiúsculas. Podemos especificar a opção - i para executar uma combinação isenta de maiúsculas e minúsculas: usando a opção - i, o grep encontra uma partida na linha 23 também. Pesquisando vários arquivos usando um curinga Se tivermos vários arquivos para pesquisar, podemos buscá-los todos usando um curinga em nosso nome de ARQUIVO. Em vez de especificar a listagem de produtos. html. Podemos usar um asterisco () e a extensão. html. Quando o comando é executado, o shell expandirá o asterisco para o nome de qualquer arquivo que encontrar (dentro do diretório atual) que termina em. html. Observe que cada linha começa com o arquivo específico onde essa correspondência ocorre. Pesquisa recursiva de subdiretórios Podemos ampliar nossa pesquisa para subdiretórios e qualquer arquivo que eles contenham usando a opção - r, o que indica ao grep que execute sua pesquisa recursivamente. Permite alterar o nosso nome FILE para apenas um asterisco (), para que ele corresponda a qualquer nome de arquivo ou diretório, e não apenas arquivos HTML: isso nos dá três partidas adicionais. Observe que o nome do diretório está incluído para qualquer arquivo correspondente que não esteja no diretório atual. Usando expressões regulares para realizar buscas mais poderosas O verdadeiro poder do grep é que ele pode ser usado para combinar expressões regulares. (É o que representa o re em grep). Expressões regulares usam caracteres especiais na seqüência PATTERN para combinar uma matriz mais ampla de strings. Vamos ver um exemplo simples. Digamos que você deseja encontrar todas as ocorrências de uma frase semelhante aos nossos produtos em seus arquivos HTML, mas a frase sempre deve começar com nosso e terminar com os produtos. Podemos especificar este padrão em vez disso: nossos. produtos. Em expressões regulares, o período (.) É interpretado como um curinga de caractere único. Isso significa que qualquer personagem que apareça nesse local corresponda. O asterisco () significa que o personagem anterior, que aparece em zero ou mais vezes, irá corresponder. Então, a combinação. Irá combinar qualquer número de qualquer personagem. Por exemplo, nossos produtos surpreendentes, os nossos, os melhores produtos e até nossos produtos irão combinar. E porque estavam especificando a opção - i, NOSSOS PRODUTOS e OuRpRoDuCtS também combinarão. Vamos executar o comando com esta expressão regular e ver quais combinações adicionais podemos obter: Aqui, também obtivemos uma correspondência da frase nossos produtos finos. A Grep é uma ferramenta poderosa que pode ajudá-lo a trabalhar com arquivos de texto, e fica ainda mais poderoso quando se sente confortável usando expressões regulares. Descrição técnica grep procura o arquivo de entrada nomeado s (ou entrada padrão se nenhum nome de arquivo for nomeado, ou se um único guião (-) for dado como o nome do arquivo) para linhas que contenham uma correspondência com o padrão PATTERN. Por padrão, o grep imprime as linhas correspondentes. Além disso, três programas variantes egrep. Fgrep e rgrep estão disponíveis: egrep é o mesmo que executar grep - E. Neste modo, o grep avalia sua cadeia PATTERN como uma expressão regular estendida (ERE). Hoje em dia, o ERE não se estende muito além das expressões regulares básicas, mas elas ainda podem ser muito úteis. Para obter mais informações sobre expressões regulares estendidas, consulte Basic vs. Extended Expressions regulares. abaixo. Fgrep é o mesmo que executar grep - F. Nesse modo, o grep avalia sua string PATTERN como um mdash de cadeia fixa, cada caractere da sua string é tratado literalmente. Por exemplo, se sua string contiver um asterisco (), o grep tentará combiná-lo com um asterisco real em vez de interpretar isso como um curinga. Se sua string contiver várias linhas (se contiver novas linhas), cada linha será considerada uma string fixa, e qualquer uma delas pode desencadear uma partida. O rgrep é o mesmo que executar o grep - r. Neste modo, o grep realizará sua pesquisa recursivamente. Se encontrar um diretório, ele irá percorrer esse diretório e continuar pesquisando. (Os links simbólicos são ignorados se você quiser pesquisar diretórios que estão vinculados simbolicamente, você deve usar a opção - R em vez disso). Em sistemas operacionais mais antigos, egrep. O fgrep e o rgrep foram programas distintos com seus próprios executáveis. Nos sistemas modernos, esses nomes de comando especiais são simplesmente atalhos para grep com os flags apropriados habilitados. Eles são funcionalmente equivalentes. Opções gerais Imprima uma mensagem de ajuda resumindo resumidamente as opções da linha de comando e saia. Se possível, use a chamada do sistema mmap para ler a entrada, em vez da chamada padrão do sistema de leitura. Em algumas situações, o mmap produz um melhor desempenho. No entanto, o mmap pode causar um comportamento indefinido (incluindo os despejos do núcleo) se um arquivo de entrada encolher enquanto o grep estiver em operação ou se ocorrer um erro de IO. Trate o (s) arquivo (s) como binário. Por padrão, em MS-DOS e MS-Windows, grep adivinha o tipo de arquivo, observando o conteúdo das primeiras 32 KB lidas a partir do arquivo. Se o grep decidir que o arquivo é um arquivo de texto, ele tira os caracteres CR do conteúdo original do arquivo (para fazer expressões regulares e funcionar corretamente). Especificar - U anula esta adivinhação, fazendo com que todos os arquivos sejam lidos e passados para o mecanismo correspondente, se o arquivo for um arquivo de texto com pares CRLF no final de cada linha, isso fará com que algumas expressões regulares falhem. Esta opção não tem efeito em plataformas diferentes de MS-DOS e MS-Windows. Trate a entrada como um conjunto de linhas, cada uma terminada por um byte zero (o caracter ASULI NUL) em vez de uma nova linha. Como a opção - Z ou - null, esta opção pode ser usada com comandos como sort - z para processar nomes de arquivos arbitrários. Expressões regulares Uma expressão regular é um padrão que descreve um conjunto de strings. As expressões regulares são construídas análogamente às expressões aritméticas, usando vários operadores para combinar expressões menores. Grep entende três versões diferentes da sintaxe de expressão regular: quotbasicquot (BRE), quotextendedquot (ERE) e quotperlquot (PRCE). No GNU grep. Não há diferença na funcionalidade disponível entre sintaxes básicas e estendidas. Em outras implementações, as expressões regulares básicas são menos poderosas. A descrição a seguir aplica-se às diferenças de expressões regulares estendidas para expressões regulares básicas são resumidas posteriormente. Perl expressões regulares oferecem funcionalidades adicionais. Os blocos de construção fundamentais são as expressões regulares que combinam com um único personagem. A maioria dos caracteres, incluindo todas as letras e dígitos, são expressões regulares que se combinam. Qualquer meta-caracter com significado especial pode ser citado precedendo-o com uma barra invertida. O período (.) Corresponde a qualquer caractere. Classes de caracteres e expressões de suporte Uma expressão de suporte é uma lista de caracteres incluída por e. Ele corresponde a qualquer caractere dessa lista se o primeiro caractere da lista for o cursor, então ele corresponde a qualquer caractere que não esteja na lista. Por exemplo, a expressão regular 0123456789 corresponde a qualquer dígito. Dentro de uma expressão de suporte, uma expressão de intervalo consiste em dois caracteres separados por um hífen. Ele corresponde a qualquer personagem que classifica entre os dois caracteres, inclusive, usando a seqüência de agrupamento local e o conjunto de caracteres. Por exemplo, na localidade C padrão, a-d é equivalente a abcd. Muitos locais classificam caracteres na ordem do dicionário e, nessas localidades, a-d geralmente não é equivalente a abcd, talvez seja equivalente a aBbCcDd. por exemplo. Para obter a interpretação tradicional de expressões de suporte, você pode usar a localidade C, configurando a variável de ambiente LCALL para o valor C. Finalmente, certas classes de caracteres nomeadas são predefinidas dentro de expressões de suporte, da seguinte forma. Os seus nomes são auto-explicativos, e eles são: alnum:. : Alfa:. : Cntrl:. : Dígito:. :gráfico: . :mais baixo: . :impressão: . : Punct:. : Espaço:. : Superior:. E: xdigit:. Por exemplo,: alnum: significa a classe de caracteres de números e letras na localidade atual. Na codificação de conjunto de caracteres C e ASCII, isso é o mesmo que 0-9A-Za-z. (Observe que os suportes desses nomes de classe fazem parte dos nomes simbólicos e devem ser incluídos além dos suportes que delimitam a expressão do suporte). A maioria dos meta-personagens perde seu significado especial dentro de expressões de suporte. Para incluir um lugar literal, primeiro na lista. Da mesma forma, para incluir um lugar literal em qualquer lugar, exceto primeiro. Finalmente, para incluir um literal -. Colocá-lo por último. O cursor e o sinal de dólar são meta-caracteres que, respectivamente, combinam a seqüência vazia no início e no final de uma linha. O Caráter Backslash e Expressões Especiais Os símbolos lt e gt correspondem respectivamente à cadeia vazia no início e no final de uma palavra. O símbolo b corresponde à cadeia vazia na borda de uma palavra, e B corresponde à cadeia vazia desde que não esteja na borda de uma palavra. O símbolo w é um sinônimo de: alnum: e W é um sinônimo de: alnum:. Repetição Uma expressão regular pode ser seguida por um dos vários operadores de repetição: se você conhece a extensão ou o padrão do arquivo que você gostaria, outro método é usar a opção --include: Você também pode mencionar os arquivos a serem excluídos com --exclude. Se você pesquisar com freqüência através do código, o Ag (The Silver Searcher) é uma alternativa muito mais rápida ao grep, isso é personalizado para pesquisar código. Por exemplo, é recursivo por padrão e ignora arquivos e diretórios listados automaticamente em. gitignore. Então você não precisa continuar passando as mesmas opções de exclusão pesadas para grep ou encontrar. Respondeu 30 de dezembro 11 às 22:59 acho que deveria ser um. No final, não é um ndash Raphael Jun 21 12 às 22:59 Funciona muito bem com o grep que vem com o Cygwin do Linux, mas não com aquele que vem com o AIX. Ndash Retenido 31 de janeiro 13 às 20:08 Deve ser - incluequot. txtquot ndash Krzysztof Wolny 18 de dezembro 13 às 13:28 KrzysztofWolny: em vez de funcionar muito bem no Ubuntu. PS: esse deveria ser um espaço de back-space, mas o analisador de redução de SO falhou. Ndash Dan Dascalescu 19 de fevereiro às 9:08 Na opção - exec - o símbolo é uma referência ao nome do arquivo que atualmente é encontrado pela ferramenta de busca (isto é, fazer algo com o nome do arquivo que encontramos), também a opção - exec deve ser encerrada com o símbolo (Para marcar o final dos comandos exec), mas porque tudo isso está sendo executado em um shell, esse símbolo deve ser escapado. E, finalmente, a opção de impressão permite encontrar a ferramenta para imprimir os nomes de arquivos encontrados na tela. Ndash rook 27 de abril 16 às 9:47 ag é a minha maneira favorita de fazer isso agora, githubggreerthesilversearcher. É basicamente o mesmo que o ack, mas com algumas otimizações mais. Respondeu 21 de maio 14 às 23:37 apenas os arquivos podem ser úteis também respondidos 3 de dezembro 12 às 17:48 Isso deve funcionar: respondido 19 de dezembro 13 às 7:20 Para encontrar o nome dos arquivos com o caminho recursivamente contendo a string particular, use o comando abaixo Para UNIX: encontre um arquivo no servidor UNIX, encontre um arquivo no servidor LINUX respondido em 29 de janeiro 16 às 14:31 Se você quiser seguir diretórios reais e não links simbólicos, se quiser seguir links simbólicos e diretórios reais ( Tenha cuidado com a recursão infinita), uma vez que você está tentando grep recursivamente, as seguintes opções também podem ser úteis para você: então, se você quiser encontrar todos os arquivos que contenham Darth Vader no diretório atual ou qualquer subdiretório e capture o nome do arquivo e o número da linha, Mas não quer que a recursão siga links simbólicos, o comando seria Se você deseja encontrar todas as menções da palavra gato no diretório e você está atualmente no diretório e deseja capturar o nome do arquivo, mas não o número da linha de qualquer instância Da corda Gatos e você quer que a recursão siga os links simbólicos se os encontrar, você pode executar uma das seguintes ações grep --help Uma breve introdução aos links simbólicos, para quem lê esta resposta e confundida com minha referência a eles: nixtutorfreebsdunderstanding - Links simbólicos Se você estiver procurando por um conteúdo específico em todos os arquivos de uma estrutura de diretório, você pode usar encontrar, pois é mais claro o que você está fazendo: Note que - l (downcase of L) mostra o nome do arquivo que contém o texto. Remova-o se você quiser imprimir a correspondência em si. Ou use - H para obter o arquivo junto com a partida. Todos juntos, outras alternativas são: Onde - n imprime o número da linha. Respondeu 30 de novembro às 16:19 Up-votado por ser a única solução de busca para evitar o uso desnecessário de xargs e usar em vez de com - exec. Evitando assim toneladas de lançamentos de processos desnecessários. -) ndash ShadowRanger 30 de janeiro 16 às 8:08 No meu IBM AIX Server (versão do SO: AIX 5.2), use: isso imprimirá o nome do arquivo de caminho eo número da linha relativa no arquivo como: 2865: Descrição. StringYouWannaFind de qualquer maneira, funciona para mim. ) Bem, não - xargs é especificamente para converter um tubo de argumentos para um artilheiro, mas sim, é verdade que os xargs modernos quando usados com - s andor - L podem lidar com artilhistas muito longos, invadindo várias invocações de comando, mas Não foi configurado dessa forma por padrão (e não foi encontrado em nenhuma das respostas acima). Como exemplo: encontrar. - type f xargs - L 100 grep o que quer que seja ndash m. thome Abr 23 15 às 13:56 Qual plataforma seria em POSIX xargs é padronizada para ter esse comportamento fora da caixa. O utilitário xargs deve limitar o comprimento da linha de comando, de modo que, quando a linha de comando for invocada, as listas combinadas de argumento e ambiente. Não deve exceder -2048 bytes. quot ndash tripleee 23 de abril 15 às 15:42 grep recursivo
Comments
Post a Comment