grep使用




使用grep只回報行號 (6)

Bash版本

    lineno=$(grep -n "pattern" filename)
    lineno=${lineno%%:*}

我有一個可能包含錯誤格式的文件(在這種情況下,模式\\backslash )。 我希望使用grep只返回發生這種情況的行號(例如,匹配在這裡,請到第#行並修復它)。

但是,似乎沒有辦法打印行號( grep -n ),而不是匹配或行本身。

我可以使用另一個正則表達式來提取行號,但我想確保grep不能自行完成。 我認為grep -no最接近,但仍顯示匹配。


你會想要冒號後的第二個字段,而不是第一個字段。

grep -n "text to find" file.txt | cut -f2 -d:


嘗試這個:

grep -n "text to find" file.ext |cut -f1 -d:

如果您打算使用AWK:

awk '/textstring/ {print FNR}' textfile

在這種情況下,FNR是行號。 AWK是一款非常棒的工具,當您查看grep |剪切,或任何時候您正在尋找grep輸出並操作它。


所有這些答案都需要grep來生成整個匹配行,然後將其傳遞給另一個程序。 如果你的線路很長,使用sed來輸出線路號可能會更有效率:

sed -n '/pattern/=' filename

要計算匹配模式的行數:

grep -n "Pattern" in_file.ext | wc -l 

提取匹配的模式

sed -n '/pattern/p' file.est

顯示模式匹配的行號

grep -n "pattern" file.ext | cut -f1 -d: