Jeśli musisz tylko sprawdzić, czy znaleziono dopasowanie, wytnij wszystkie linie wejściowe do długości żądanego prefiksu ( $1), a następnie użyj grep o stałym wzorze:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
Łatwo jest również uzyskać liczbę pasujących linii:
cut -c 1-"${#1}" | grep -cF "$1"
Lub numery linii wszystkich pasujących linii (numery linii zaczynają się od 1):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
Możesz podać numery wierszy headi tailuzyskać pełny tekst pasujących wierszy, ale w tym momencie łatwiej jest sięgnąć po nowoczesny język skryptowy, taki jak Python lub Ruby.
(W powyższych przykładach założono, że posix grep i cut. Zakładają, że plik do przeszukiwania pochodzi ze standardowego wejścia, ale można go łatwo dostosować do pobrania nazwy pliku.)
Edycja: Należy również upewnić się, że wzorzec ( $1) nie jest łańcuchem zerowym. W przeciwnym razie cutnie powie values may not include zero. Ponadto, jeśli używasz Bash, użyj, set -o pipefailaby złapać wyjścia błędów przez cut.
grep '^$1'? Czy nie miałeś na myśli, że chcesz zapobiec$1rozszerzaniu się powłoki?