匹配所有仅包含一个'/'字符的字符串


2

我有一个很长的文件,包含文件路径,每行一个。我想检索列出的所有目录只有1级深度。因此,我只想提取其中包含单行的那些行/

我想要:./somedir
我不要:./somedir/someotherdir

我可以使用grep和/或正则表达式吗?

Answers:


6

当然。那很简单:

find . | grep -P '^\./[^/]*$'

...显然是我在使用“ find”命令来说明您所描述的内容。正则表达式的工作方式如下:

  • ^$是(分别)指定行的开始和结束的锚点。所有内容必须在这两个字符之间
  • \./ 是一个字面上的句点,后跟一个字面正斜杠
  • [^]是一个字符类,不允许在^和之后的任何内容]
  • *[^/]说,让零次或多个出现该字符类的

您也可以这样:

dosomething | grep -P '^[^/]*/[^/]*$'

这将只允许/一行上任何位置的一行(甚至第一个或最后一个字符)。


1
顺便./说一句,您提供的示例使我相信您正在使用find生成列表。假设是这种情况,您可以执行以下操作: find . -maxdepth 1 (other conditions)
布莱恩·范登堡

2

@Brians解决方案有效,这是一种更通用的解决方案,一./开始不需要:

grep -P '^[^/]*/[^/]*$'

例如:

/aa/somedir
test/somedir/someotherdir
somedir/otherdir

--> somedir/otherdir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.