まず、有効な正規表現が必要です。あなたが求めていることを正しく理解していれば、これはうまくいきます:
pcregrep -Mn '^firstLine.*\n^secondLine' myFile
これは単なる行番号以上のものを出力することに注意してください。pcregrep
man ページに従って、一致する行も出力します。
開始行番号だけを印刷したい場合は、次を試してください。
sed -n '/^firstLine/=' myFile
正規表現/^firstLine/
は最初の行を選択し、コマンドは行番号を出力するように=
指示します。sed
最後の行番号だけを印刷するには:
sed -n '/^secondLine/=' myFile
両方とその間の任意の行を取得するには:
sed -n '/^firstLine/,/^secondLine/=' myFile
awk
も使用できます。ライン選択も同様です。行番号を出力するコマンドが異なります。例えば:
awk '/^firstLine/ {print NR}' myFile
行番号を変数に取り込む
コマンド置換を使用して、行番号を変数に取り込むことができます。
lineNumber=$(awk '/^firstLine/ {print NR}' myFile)
ただし、行番号が 2 つ以上ある場合は、役に立たない可能性があります。その場合、 などの配列をサポートするシェルを使用している場合は、bash
次のように行番号を配列にキャプチャすることをお勧めします。
lineNumbers=($(awk '/^firstLine/ {print NR}' myFile))
echo $lineNumbers
配列に慣れていない場合は、 などのステートメントでは配列全体が表示されず、最初の要素のみが表示されることに注意してください。配列全体を表示するには、次を実行します。
declare -p lineNumbers