我收到一个用find生成的巨大文本文件。
生成的文本文件的内容是具有完整path的文件引用,即:
//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
(文件名和path是随机的,所以我不能始终从开始或结束的位置n开始)
我需要grep这个文本文件的特定模式,写入结果(这需要一个完整的行匹配)到一个新的(sortingsort )文件,但也需要忽略任何不是文件名的匹配。
所以,用我上面的示例行,我有一个search模式“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 sort -f -u $textfile | grep -i $pattern > $newfile不成功,因为当目录包含模式时,grep也会匹配,这将导致//server/dir1/dir2/dir3/dir2.ext的“false”匹配。
我读了grep手册,正则expression式可能与选项-G但不能摆脱任何方式grep只在文件名部分行。
尝试这样的grepping:
grep -i 'dir1[^/]*$'
这意味着它只会接受匹配,如果匹配dir1 ,并且匹配没有跟随任何/直到行结束。