Bash脚本:打印字符串之间有空格的列

时间:2016-09-03 08:05:27

标签: bash shell awk sed

我遇到了这个问题。 当我运行ls -l命令。我得到了这个结果(为了简单起见,我故意省略了第5节之后的列)

-rw-R - R--。 1 leslie users 8月26日00:14
-rw-R - R--。 1 sherri root 8月26日00:14
-rw-R - R--。 1 marie domain users 8月26日00:14

我想打印集团所有权栏目。通过几种方式我可以打印第4列,这是组所有权列。问题是一些组名在其中有空间。例如: - "域用户" 。 ls -l | awk' {print $ 4}'像这样打印第4列

用户

我想要的输出是

用户

域用户

提供帮助。我很多天都被困在这里。 我真的需要一些智能机制,可以检测到域用户或其他具有空间名称的组是属于组所有者类别的组名。我的群组来自Active Directory。这就是为什么有些人有空间的原因。

2 个答案:

答案 0 :(得分:6)

您正在解析tableArray的输出。不要这样做。出于某些原因,请参阅:Why you shouldn't parse the output of ls(1)

作为替代方案,请尝试GNU ls。这将打印组名称:

find

如果您希望在组名称前显示文件名:

find . -maxdepth 1 -printf '%g\n'

查找唯一的组名

上述输出可以发送到find . -maxdepth 1 -printf '%-20f %g\n' 以仅选择唯一名称:

sort -u

答案 1 :(得分:5)

使用stat代替ls。在Linux上:

stat -c %G *        # Shorter,
stat --format=%G *  # Longer.

在BSD上:

stat -f%Sg *