
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