Yalnızca bir eşleşme bulunup bulunmadığını kontrol etmeniz gerekiyorsa, tüm giriş satırlarını istenen önek ( $1
) uzunluğuna kadar kesin ve ardından sabit kalıp grep kullanın:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
Eşleşen hatların sayısını elde etmek de kolaydır:
cut -c 1-"${#1}" | grep -cF "$1"
Veya eşleşen tüm satırların satır numaraları (satır numaraları 1'den başlar):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
Sen satır numaralarını yem olabilir head
ve tail
eşleştirme hatları tam metnini almak için, ama bu noktada sadece Python veya Ruby gibi modern bir komut dosyası dili ulaşmak daha kolaydır.
(Yukarıdaki örneklerde Posix grep ve cut varsayılmaktadır. Aranacak dosyanın standart girdiden geldiğini varsayarlar, ancak bunun yerine dosya adı alacak şekilde kolayca uyarlanabilirler.)
Düzenle: Desenin ( $1
) sıfır uzunluklu bir dize olmadığından da emin olmalısınız . Aksi takdirde cut
söyleyemez values may not include zero
. Ayrıca, Bash kullanıyorsanız, set -o pipefail
hata çıkışlarını yakalamak için kullanın cut
.
grep '^$1'
mı? Yoksa merminin$1
genişlemesini önlemek istediğiniz anlamına mı gelmediniz?