行の先頭にgrepを固定文字列

行の先頭にgrepを固定文字列

grep "^$1"一種の操作ですが、"$1"grepがその文字を具体的に解釈しないようにエスケープするにはどうすればよいですか?

それとももっと良い方法がありますか?

編集する: 検索したくないが'^$1'行の先頭にある場合にのみ一致する必要がある動的に挿入された固定文字列。それが私の言葉の意味です$1

ベストアンサー1

一致するものがあることを確認する必要がある場合は、すべての入力行を必要なプレフィックス$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

行番号を入力しheadtail一致する行の全文を取得できますが、PythonやRubyなどの最新のスクリプト言語を使用する方が簡単です。

(上記の例では、Posix grepとcutを想定しています。検索中のファイルが標準入力から来ていると仮定していますが、ファイル名を使用するように簡単に変更できます。)

$1編集:また、パターン()が長さ0の文字列ではないことを確認する必要があります。それ以外の場合はcut話せませんvalues may not include zero。また、Bashを使用している場合は、set -o pipefailエラー終了をキャッチするために使用しますcut

おすすめ記事