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 head
i tail
uzyskać 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 cut
nie powie values may not include zero
. Ponadto, jeśli używasz Bash, użyj, set -o pipefail
aby złapać wyjścia błędów przez cut
.
grep '^$1'
? Czy nie miałeś na myśli, że chcesz zapobiec$1
rozszerzaniu się powłoki?