排除子目录

时间:2018-03-27 20:30:32

标签: regex linux bash grep

如何使用grep或任何其他方法排除每个子目录?

通过以下命令:

awk -F '&' '{ print $1 }' file | grep $myPath | sort | uniq

有一个输出:

home/docs/file1
home/docs/file2
home/docs/subdir/file3
home/docs/file4
home/docs/anydir/file5

但我需要的输出:

home/docs/file1
home/docs/file2
home/docs/file4

这只是一个例子,我不知道会有多少列。

1 个答案:

答案 0 :(得分:1)

假设myPath=home/docs您只需要匹配不具有任何后续/个字符的路径,例如:

grep "^${myPath}/[^/]*$"
  • ^匹配行的开头(确保我们不匹配某些与myPath匹配的更深层子目录,例如/home/docs/foo/home/docs/bar
  • ${myPath}使用{}有助于分隔较大字符串中的变量
  • /myPath
  • 之后只匹配一个文字斜杠
  • [^/]*匹配不是/
  • 的任意数量的字符
  • $匹配该行的结尾(确保我们匹配整行,而不仅仅是其中的一部分)

示例:

$ myPath=home/docs
$ cat <<EOF | grep "^${myPath}/[^/]*$"
> home/docs/file1
> home/docs/file2
> home/docs/subdir/file3
> home/docs/file4
> home/docs/anydir/file5
> EOF

home/docs/file1
home/docs/file2
home/docs/file4