Files
用(查找生成的)文件grep一個文本文件,但忽略路徑
我收到一個用 find 生成的巨大文本文件。
生成的文本文件的內容是具有完整路徑的文件引用,即:
//server/dir1/dir1foobar.ext //server/dir1/dir2/dir1bar.ext //server/dir1/dir2/dir1.ext //server/dir3/dir4/dir4.ext //server/dir5/dir6/dir7/dir1foo.ext //server/dir1/dir2/dir3/dir2.ext //server/dir3/dir4/dir5/dir6/dir3.ext
(文件名和路徑有點隨機,所以我不能總是從行首或行尾的位置 n 開始)
我需要
grep
將此文本文件用於特定模式,將結果(需要是匹配的完整行)寫入新的(用 排序sort
)文件,但還需要忽略任何不是文件名的匹配。因此,對於上面的範例行,我有一個搜尋模式“dir1”,結果必須是一個包含這些行的新文件:
//server/dir1/dir1foobar.ext //server/dir1/dir2/dir1bar.ext //server/dir1/dir2/dir1.ext //server/dir5/dir6/dir7/dir1foo.ext
我的嘗試
sort -f -u $textfile | grep -i $pattern > $newfile
沒有成功,因為當目錄包含模式時 grep 也有匹配,這將導致//server/dir1/dir2/dir3/dir2.ext
.我在手冊中讀到
grep
,正則表達式可以使用選項-G
,但無法找出任何方式來僅在一行的文件名部分中進行 grep。
嘗試像這樣grepping:
grep -i 'dir1[^/]*$'
這意味著它只會在匹配的情況下接受匹配,並且該匹配在行尾之前
dir1
不會跟隨任何匹配。/