0

我想使用awk命令只打印目录。我不想打印当前目录和父目录,所以我创建了一个适当的正则表达式匹配:

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.$/ && $9 !~ /^\.\.$/   { print $1"\t"$9 } '

代码可以正常工作,但我想让它更具可读性,如下所示:

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/    { print $1"\t"$9 } '

不幸的是,第二场比赛没有奏效。

应该如何定义匹配一两个

4

5 回答 5

0

您的第二个示例不起作用,因为较旧的 awk(非 gnu)awk 版本不支持这样的正则表达式数字模式:

/\.{1,2}/

但是,只是为了获取目录列表,您不应该解析 ls 的输出。

编辑:要打印隐藏目录,但要避免...使用它:

您可以使用:

printf "%s\n" */ .*[!.]*/

请记住,带有换行符的文件/目录名称是有问题的。

于 2014-02-10T04:12:30.950 回答
0

您是否在 Solaris 中运行过 awk 命令,请将 awk 替换为/usr/xpg4/bin/awk

ls -la | /usr/xpg4/bin/awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/ {print $1"\t"$9}'
于 2014-02-10T03:52:12.190 回答
0

您可以使用以下内容,其中不包括 hawk 但效果很好:

ls -ld */

甚至更好

ls -1 -d */
于 2014-02-10T10:13:49.100 回答
0

你的第二个例子对我来说很好:

$ /bin/ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/ {print $1"\t"$9}'
drwxr-xr-x  .git
drwxr-xr-x  .idea
drwxr-xr-x  data
drwxr-xr-x  src

当我第一次查看它时,它对我也不起作用,因为我有 'ls -lF' 的别名,这意味着当前目录被列为“./”而父目录是“. ./" 无法匹配正则表达式,因为 '/' 锚定在行尾(正则表达式中的 '$')。我想知道你是否有类似的问题。

于 2014-02-10T02:42:21.047 回答
0

只需加上星号 *

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.*$/ {print $1"\t"$9}'
于 2014-07-13T10:40:55.230 回答