Linux
在 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
問題:
- 所以很明顯它與第一行匹配,因為該行中有一個“c”。
- 輸出還將包括該行的內容!我希望它只是行號
我應該改變什麼來解決這些問題?
您需要
grep
通過以下方式將匹配錨定到行首來說明您的“應該在行首”約束^
:trimLineNum=$(grep -m1 -n '^c' "${varFileLog}")
然後 post-process
grep
的輸出只保留行號: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'