Bashスクリプトでテキストが最初に表示される行番号を見つける

Bashスクリプトでテキストが最初に表示される行番号を見つける

テキストファイルの行の先頭にある特定の検索文字列が最初に表示される行番号を見つけて、私のbashスクリプトの変数に保存する必要があります。たとえば、「c」が最初に表示されるものを探したいとします。

abc
bde
cddefefef // this is the line that I need its line number
Casdasd // C here is capital, I dont need it
azczxczxc
b223r23r2fe
Cssdfsdfsdf
dccccdcdcCCDcdccCCC
eCCCCCC

これを思い出しましたが、ご覧のように問題が大きいです。

   trimLineNum=$(cat "${varFileLog}" | grep -m1 -n "c")
   echo "c is at line #"${trimLineNum}

出力は次のとおりです。

c is at line #1:abc

質問:

  1. その行に「c」があるので、明らかに最初の行と一致します。
  2. 出力にはその行の内容も含まれます!私はそれが行番号だけでありたいです。

これらの問題を解決するには、何を変更する必要がありますか?

ベストアンサー1

POSIXでは、sed通常の出力を抑制するオプションを使用でき、-n(pattern)で始まる行の場合とuitを使用して行番号を印刷できます。c^c=q

sed -n '/^c/{=;q;}'

GNUを使用すると、コマンドをsed使用して出力なしで終了し、次に単純化できます。Q

sed '/^c/!d;=;Q'

おすすめ記事