Si solo necesita verificar si se encuentra o no una coincidencia, corte todas las líneas de entrada a la longitud del prefijo deseado ( $1) y luego use grep de patrón fijo:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
También es fácil obtener el recuento de líneas coincidentes:
cut -c 1-"${#1}" | grep -cF "$1"
O los números de línea de todas las líneas coincidentes (los números de línea comienzan en 1):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
Puede alimentar los números de línea heady tailobtener el texto completo de las líneas coincidentes, pero en ese punto es más fácil acceder a un lenguaje de script moderno como Python o Ruby.
(Los ejemplos anteriores suponen que Posix grep and cut. Asumen que el archivo a buscar proviene de una entrada estándar, pero puede adaptarse fácilmente para tomar un nombre de archivo).
Editar: también debe asegurarse de que el patrón ( $1) no sea una cadena de longitud cero. De lo contrario cutno se puede decir values may not include zero. Además, si usa Bash, use set -o pipefailpara atrapar salidas de error por cut.
grep '^$1'? ¿O no quiso decir que desea evitar$1que el shell lo expanda?