Sed / awk / perl correspondem a todos os prefixos de uma string dada

2

Gostaria de combinar todas as linhas em um arquivo em que minha palavra seja um prefixo ou a linha seja um prefixo da minha palavra. Por exemplo, a pesquisa por "abc" deve corresponder:

a
ab
abc
abcd
abcxyz

mas não:

xabc
zzab
xaz

A palavra "minha palavra é um prefixo de" é fácil, basta combinar com " ^abc ", é claro, mas não encontrei uma solução para o bit "a linha é um prefixo da minha palavra". Tentei algo no awk, mas não consegui tornar o conteúdo da linha uma parte da expressão regular.

    
por Ossifer 02.02.2017 / 21:27

1 resposta

1

Existem dois casos em que você precisa lidar, onde a linha é menor do que a string de pesquisa ou onde ela é mais longa.

Quando é mais longo, você quer testar se o início da linha é igual à string de teste.

Quando é mais curto, você deseja testar se o início da string de pesquisa é igual à linha.

Nos casos em que os comprimentos são iguais, o método funciona.

awk -v search=abc 'length() > length(search) ? substr($0, 1, length(search)) == search : substr(search, 1, length()) == $0' inputfile
    
por 02.02.2017 / 22:41