Sed/awk/perl corresponde a todos os prefixos de uma determinada string

Sed/awk/perl corresponde a todos os prefixos de uma determinada string

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

a
ab
abc
abcd
abcxyz

mas não:

xabc
zzab
xaz

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

Responder1

Há dois casos que você precisa tratar: onde a linha é mais curta que a string de pesquisa ou onde é mais longa.

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

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

Nos casos em que os comprimentos são iguais, qualquer um dos métodos funciona.

awk -v search=abc 'length() > length(search) ? substr($0, 1, length(search)) == search : substr(search, 1, length()) == $0' inputfile

informação relacionada