在UNIX中将grep输出连接到echo语句

时间:2015-02-02 21:42:41

标签: shell unix grep

我正在尝试输出SINGLE行上给定路径中的目录数。我的愿望是输出这个:

  

X-many目录

目前,在我的bash sript中,我得到了这个:

  

X-许多

     

目录

这是我的代码:

ARGUMENT=$1

ls -l $ARGUMENT | egrep -c '^drwx'; echo -n "directories"

如何修复输出?感谢

3 个答案:

答案 0 :(得分:4)

我建议

 echo "$(ls -l "$ARGUMENT" | egrep -c '^drwx') directories"

这使用shell的最终换行符删除命令替换。

答案 1 :(得分:3)

如果在文件/目录名中使用了特殊字符,则不会传递给ls输出并计算目录,因为您可能会得到错误的结果。

要计算目录,请使用:

shopt -s nullglob
arr=( "$ARGUMENT"/*/ )
echo "${#arr[@]} directories"
    在glob末尾的
  • /将确保仅匹配"$ARGUMENT"路径中的目录。
  • shopt -s nullglob是确保在glob模式失败时返回空结果(给定参数中没有目录)。

答案 2 :(得分:0)

作为替代解决方案

$ bc <<< "$(find /etc -maxdepth 1 -type d | wc -l)-1"
116
另一个

$ count=0; while read curr_line; do count=$((count+1)); done < <(ls -l ~/etc | grep ^d); echo ${count}
116

可以正常使用文件夹名称中的空格

$ ls -la
total 20
drwxrwxr-x  5 alex alex 4096 Jun 30 18:40 .
drwxr-xr-x 11 alex alex 4096 Jun 30 16:41 ..
drwxrwxr-x  2 alex alex 4096 Jun 30 16:43 asdasd
drwxrwxr-x  2 alex alex 4096 Jun 30 16:43 dfgerte
drwxrwxr-x  2 alex alex 4096 Jun 30 16:43 somefoler with_space

$ count=0; while read curr_line; do count=$((count+1)); done < <(ls -l ./ | grep ^d); echo ${count}
3