Se você precisa apenas verificar se uma correspondência é encontrada, corte todas as linhas de entrada no comprimento do prefixo desejado ( $1
) e, em seguida, use grep de padrão fixo:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
Também é fácil obter a contagem de linhas correspondentes:
cut -c 1-"${#1}" | grep -cF "$1"
Ou os números de linha de todas as linhas correspondentes (os números de linha começam em 1):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
Você poderia alimentar os números de linha para head
e tail
para obter o texto completo das linhas correspondentes, mas, nesse ponto, é mais fácil procurar apenas uma linguagem de script moderna como Python ou Ruby.
(Os exemplos acima assumem Posix grep e cut. Eles assumem que o arquivo a ser pesquisado vem da entrada padrão, mas pode ser facilmente adaptado para usar um nome de arquivo.)
Edit: Você também deve garantir que o padrão ( $1
) não seja uma string de comprimento zero. Caso contrário, cut
falhará dizendo values may not include zero
. Além disso, se estiver usando o Bash, use set -o pipefail
para capturar as saídas de erro em cut
.