我需要找到一種方法來輸出從一個文件到另一個文件的grep匹配的確切座標。所以說'模式'包含一個匹配的字符串模式列表。 「搜索」是包含文字來搜索基於行的文本(ASCII)文件grep匹配的行和字符串位置
有:
grep -onf patterns search
我得到的線,在這條線在當前行的匹配,但不是模式模式匹配,這是我需要的。它不限於使用grep,awk等也很好!
你們能幫忙嗎?
在此先感謝!
最佳,
菲爾
我需要找到一種方法來輸出從一個文件到另一個文件的grep匹配的確切座標。所以說'模式'包含一個匹配的字符串模式列表。 「搜索」是包含文字來搜索基於行的文本(ASCII)文件grep匹配的行和字符串位置
有:
grep -onf patterns search
我得到的線,在這條線在當前行的匹配,但不是模式模式匹配,這是我需要的。它不限於使用grep,awk等也很好!
你們能幫忙嗎?
在此先感謝!
最佳,
菲爾
未經測試:
awk 'NR==FNR{strings[$0]; next} {for (string in strings) if ((idx = index($0,string)) > 0) print string, FNR, idx }' file1 file2
由於您使用-f
使用grep我認爲這是你想要的字符串匹配,而不是正則表達式。
上面只是從第一個文件的內容構建一個字符串數組,然後爲第二個文件的每一行尋找每個字符串在那個謊言上出現的位置的索引,並且如果存在,則會打印字符串,行號和字符串首次出現在該行上的索引(起始位置)。
是的只是字符串。哇謝謝!有效!只因爲我真的很感興趣,如果你有空閒時間。你可以解釋它在做什麼?謝謝!! –
添加說明。 –
使用awk的,你可以這樣做:
awk -v s="needle" 'i=index($0, s) {print NR, i}' file
這將打印線#和搜索項的線位置。
UPDATE:
while read -r line; do
awk -v s="$line" 'i=index($0, s) {print s ":" NR "," i}' searches
done < patterns
或純awk的基礎:
awk 'FNR==NR{a[$0];next} {for (i in a) {if (p=index($0, i)) print i ":" NR "," p} }' patterns searches
此外,使用'grep --color'來突出顯示匹配 – higuaro
這只是顏色的結果,並沒有給我在行中的位置;) –