我收到了一个用 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 的方法。
答案1
尝试像这样进行 grep:
grep -i 'dir1[^/]*$'
这意味着它仅当匹配时才会接受匹配,并且直到行尾之前dir1
该匹配都不会跟有任何匹配。/