一致するかどうかのみを確認する必要がある場合は、すべての入力行を目的のプレフィックス($1)の長さにカットしてから、固定パターンgrepを使用します。
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
一致する行の数を取得するのも簡単です:
cut -c 1-"${#1}" | grep -cF "$1"
または、一致するすべての行の行番号(行番号は1から始まります):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
次のような行番号を養うことができhead、およびtailマッチングラインの全文を取得するには、しかし、その時点でそれはちょうどPythonやRubyのような近代的なスクリプト言語のために到達するために簡単です。
(上記の例では、Posix grepおよびcutを想定しています。検索するファイルは標準入力からのものであると想定していますが、代わりにファイル名を取得するように簡単に調整できます。)
編集:パターン($1)が長さゼロの文字列でないことも確認する必要があります。それ以外の場合cutは言って失敗しますvalues may not include zero。また、Bashを使用set -o pipefailしている場合は、を使用してエラー終了をキャッチしますcut。
grep '^$1'か?それとも$1、シェルによって展開されるのを防ぎたいという意味ではありませんか?