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

Mal*_*ala 2 grep regex

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

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

我可以用 grep 和/或正则表达式做到这一点吗?

Bri*_*erg 6

当然。这很简单:

find . | grep -P '^\./[^/]*$'
Run Code Online (Sandbox Code Playgroud)

...显然我使用的“查找”命令只是为了说明您所描述的内容。正则表达式的工作原理如下:

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

你也可以这样做:

dosomething | grep -P '^[^/]*/[^/]*$'
Run Code Online (Sandbox Code Playgroud)

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