如何使用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
这只是一个例子,我不知道会有多少列。
答案 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