Linux

在 bash 腳本中查找文本第一次出現的行號

  • June 24, 2022

我需要找出給定搜尋字元串的第一次出現的行號,該字元串應該位於文本文件的行首,並將其儲存在我的 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. 輸出還將包括該行的內容!我希望它只是行號

我應該改變什麼來解決這些問題?

您需要grep通過以下方式將匹配錨定到行首來說明您的“應該在行首”約束^

trimLineNum=$(grep -m1 -n '^c' "${varFileLog}")

然後 post-processgrep的輸出只保留行號:

trimLineNum=$(grep -m1 -n '^c' "${varFileLog}" | cut -d: -f1)

使用 POSIX sed,您可以使用該選項抑制正常輸出,然後對於以(pattern )-n開頭的行,使用和uit列印行號:c``^c``=``q

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

使用 GNU sed,您可以使用Q命令退出而不輸出並簡化為

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

引用自:https://unix.stackexchange.com/questions/707327