Se você apenas precisar verificar se uma correspondência foi ou não encontrada, corte todas as linhas de entrada no comprimento do prefixo desejado ( $1
) e 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 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ê pode alimentar os números das linhas head
e tail
obter o texto completo das linhas correspondentes, mas nesse momento é mais fácil acessar uma linguagem de script moderna como Python ou Ruby.
(Os exemplos acima assumem o 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.)
Editar: Você também deve garantir que o padrão ( $1
) não seja uma string de comprimento zero. Caso contrário, cut
falha ao dizer values may not include zero
. Além disso, se estiver usando o Bash, use set -o pipefail
para capturar as saídas de erro por cut
.
grep '^$1'
? Ou você não quis dizer que deseja impedir que$1
o shell seja expandido?