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 head
y tail
obtener 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 cut
no se puede decir values may not include zero
. Además, si usa Bash, use set -o pipefail
para atrapar salidas de error por cut
.
grep '^$1'
? ¿O no quiso decir que desea evitar$1
que el shell lo expanda?