Files

用(查找生成的)文件grep一個文本文件,但忽略路徑

  • May 9, 2015

我收到一個用 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不會跟隨任何匹配。/

引用自:https://serverfault.com/questions/690835