Wenn Sie nur überprüfen müssen, ob eine Übereinstimmung gefunden wurde, schneiden Sie alle Eingabezeilen auf die Länge des gewünschten Präfixes ( $1) und verwenden Sie dann grep mit festem Muster:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
Es ist auch einfach, die Anzahl der übereinstimmenden Zeilen zu ermitteln:
cut -c 1-"${#1}" | grep -cF "$1"
Oder die Zeilennummern aller übereinstimmenden Zeilen (Zeilennummern beginnen bei 1):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
Sie könnten die Zeilennummern in headund taileingeben, um den vollständigen Text der übereinstimmenden Zeilen zu erhalten, aber zu diesem Zeitpunkt ist es einfacher, nur nach einer modernen Skriptsprache wie Python oder Ruby zu greifen.
(Die obigen Beispiele gehen von Posix grep und cut aus. Sie gehen davon aus, dass die zu durchsuchende Datei von der Standardeingabe stammt, können aber leicht angepasst werden, um stattdessen einen Dateinamen zu übernehmen.)
Bearbeiten: Sie sollten auch sicherstellen, dass das Muster ( $1) keine Zeichenfolge mit der Länge Null ist. Sonst cutscheitert das Sprichwort values may not include zero. Wenn Sie Bash verwenden set -o pipefail, können Sie auch Fehlerausgänge mit abfangen cut.
grep '^$1'. Oder meintest du nicht, dass du verhindern willst, dass das$1durch die Shell erweitert wird?