我有一個可能包含錯誤格式的文件(在這種情況下,模式爲\\backslash
)。我想使用grep
只返回發生這種情況的行號(如在,匹配在這裏,到第#行並修復它)。使用grep僅回報行號
但是,似乎沒有辦法打印行號(grep -n
),而不是匹配或行本身。
我可以使用另一個正則表達式來提取行號,但我想確保grep不能自己做。我認爲最接近grep -no
,但仍然顯示比賽。
我有一個可能包含錯誤格式的文件(在這種情況下,模式爲\\backslash
)。我想使用grep
只返回發生這種情況的行號(如在,匹配在這裏,到第#行並修復它)。使用grep僅回報行號
但是,似乎沒有辦法打印行號(grep -n
),而不是匹配或行本身。
我可以使用另一個正則表達式來提取行號,但我想確保grep不能自己做。我認爲最接近grep -no
,但仍然顯示比賽。
試試這個:
grep -n "text to find" file.ext |cut -f1 -d:
在我的機器,這只是打印匹配的文件不帶行號(所以如果我是隻印一次在文件中,3場比賽),這是非常有用的還是...... –
@MarioAwad,你應該操縱'-f '參數。對我來說,它是'-f2'。 (知道這是舊的東西,但我認爲它可以幫助一些可憐的靈魂) –
感謝可愛的舊的unix adhoc shell腳本。這表明靈活的工具值得他們的複雜性和學習曲線! – Alex
如果你打開使用AWK:
awk '/textstring/ {print FNR}' textfile
在這種情況下,FNR是行號。 AWK是一款非常棒的工具,當您查看grep |剪切,或任何時候您正在尋找grep輸出並操作它。
使用一個過程(過去更重要,但仍然),並且很容易理解awk初學者! – bgStack15
當只有一個文件被檢查時,'NR'也可以工作,就像這種情況一樣。 –
你會想要冒號後的第二個字段,而不是第一個字段。
grep -n "text to find" file.txt | cut -f2 -d:
如果你想匹配文本,這種方法可行,但在行號是OP要求的情況下。 – AJP
所有這些問題的答案都需要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:
1st應該是「grep -c」Pattern'in_file.ext「。第二個應該是「grep -o」Pattern'in_file.ext「。無需涉及sed或wc。 – thelogix
我建議用sed
和awk
的答案對於剛剛起步的行號,而不是使用grep
得到整個拼接線,然後取出從輸出線號與cut
或其他工具。只使用grep的
ruby -ne 'puts $. if /pattern/' filename
:爲了完整起見,你也可以使用Perl:
perl -nE '/pattern/ && say $.' filename
或Ruby
grep -n "text to find" file.ext | grep -Po '^[^:]+'
對我來說,最有用的答案是問題:'grep -no'!這就是我來這裏嘗試做的! (即不打印有時非常長的行,例如縮小的javascript源文件。) – LondonRob