Grep todas as cadeias que não começam com número (s)

7

Estou procurando que o grep mostre todos os caracteres que não começam com números. Eu fiz algo assim:

grep -v '^[1-2]*[a-zA-Z]?' -o

mas não funciona. Você tem alguma idéia para algum reg exp?

    
por Paweł Jaworowski 25.02.2015 / 17:33

3 respostas

14

grep -v '^[0-9]'

Será exibida todas as linhas que não corresponderem ( -v ) às linhas que começam com ^ com um número [0-9]

Por exemplo

$ cat test
string
string123
123string
1string2
$ grep -v '^[0-9]' test
string
string123

ou se você quiser remover todas as palavras que começam com um dígito

sed 's/[[:<:]][[:digit:]][[:alnum:]_]*[[:>:]]//g'

ou com atalhos e asserções

sed 's/\<\d\w*\>//g'

Por exemplo

$ cat test
one
two2
3three
4four4
five six
seven 8eight
9nine ten
11eleven 12twelve
a b c d
$ sed 's/[[:<:]][[:digit:]][[:alnum:]_]*[[:>:]]//g' test
one
two2


five six
seven 
 ten

a b c d
    
por 25.02.2015 / 17:42
3

Depende de como você define uma string (por exemplo, se você contar caracteres de pontuação para string ou não). No entanto, você pode começar de algo como

grep -Po '\b[^[:digit:]].*?\b' file
    
por 25.02.2015 / 17:45
2

Para remover todas as palavras de uma linha que começa com um número com sed , você pode fazer:

sed 'x;s/.*//;G
     s/[[:space:]][[:punct:]]\{0,1\}[0-9][^[:space:]]*//g
     s/\n//'

... ou, se você quiser apenas palavras que não começam com números impressos em uma linha separada:

sed 'y/!\t "'"'?/\n\n\n\n\n\n/;/^[_[:alpha:]]/P;D"

... o acima deve funcionar razoavelmente bem. Você vai querer adaptar a \n ewline y/// tradução para os divisores que você considera relevantes. E, sed implementação dependendo, você também pode querer um% real<tab> no lugar do escape de barra invertida \t .

    
por 26.02.2015 / 02:03