grep para seqüências alfanuméricas de qualquer comprimento com dois pontos em cada lado


14

Como você deseja uma string alfanumérica de 1 a 50 caracteres (idealmente, qualquer comprimento também funcionaria) com dois pontos de cada lado - um resultado típico seria todas as linhas que contêm a string :shopping:. Até agora, tenho o código abaixo (tentei algumas variações) que não funciona:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

Você só precisa habilitar os recursos estendidos de regex grepincluindo o -Ecomutador.
slm

Respostas:


13

Você precisa habilitar expressões regulares estendidas para isso:

grep -E ':[[:alnum:]]+:' ~/x.txt

4

Com expressões regulares básicas, você pode escrever como:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

Observe que \{(ao contrário de \+ou \?por exemplo) é padrão e portátil e, na verdade, os equivalentes BRE de +e ?geralmente são escritos com \{: \{1,\}e \{0,1\}. grep -Etambém é padrão e portátil, portanto, você pode usá-lo da mesma maneira que cria regexps mais legíveis nesses casos.


1

Você está usando uma expressão regular estendida, portanto, é necessário usar a opção -E:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt

obrigado! Coloquei a outra resposta como correta, porque não escrevi meu script "ideal" no título e não quero fazer com que as pessoas que pesquisam no Google para copiar copiem a resposta errada, mas usarei a sua. :)

1
@TorThommesen - você pode editar o título do seu Q, se não estiver correto.
slm

0

Como ninguém mais o mencionou, você também pode usar o egrepque, como eu o entendo, é equivalente a grep -E.

egrep ':[[:alnum:]]{1,100}:' ~/x.txt

1
egrepfoi o comando histórico para grep com EREs. A funcionalidade do grep e egrep foi (há muito tempo) mesclada no grep com a opção -E. egrepagora é considerado obsoleto / obsoleto (mas é improvável que ocorra porque algumas pessoas ainda estão acostumadas).
Stéphane Chazelas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.