Bash 脚本 : Printing a column with having space between the string

标签 bash shell awk sed

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

-rw-r--r--。 1 位 leslie 用户 8 月 26 日 00:14
-rw-r--r--。 1 雪莉根 8 月 26 日 00:14
-rw-r--r--。 1 玛丽域用户 8 月 26 日 00:14

我想打印组所有权列。通过几种方式,我可以打印第 4 列,即组所有权列。问题是某些组名中有空格。例如:-“域用户”。 ls -l | awk '{print $4}' 正在像这样打印第 4 列

用户

域名

我想要的输出是

用户

域用户

请帮忙。我被困在这里很多天了。 我真的需要一些智能机制来检测域用户或其他具有空间名称的组是属于组所有者类别的组名。我的组来自 Active Directory。这就是为什么有些里面有空间的原因。

最佳答案

您正在解析 ls 的输出。不要那样做。部分原因参见:Why you shouldn't parse the output of ls(1)

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

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

如果要在组名前显示文件名:

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

找到唯一的组名

上面的输出可以发送到 sort -u 以仅选择唯一的名称:

find / -path /proc -prune -o -printf '%g\n' | sort -u

关于Bash 脚本 : Printing a column with having space between the string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39304691/

相关文章:

bash - 将在 awk 中找到的文件名传递给 vim 命令

python - 允许 python mac 应用程序运行 sudo 脚本

arrays - 包含 0 的 awk 数组打印为空白

replace - 替换第一列文本中的特定字符

bash - 寻找一种方法让 awk 迭代循环文件(在 bash 中创建 PERCENTRANK 函数)

bash - 在 bash 上逐行读取文件;每行包含另一个独特文件的路径

bash - 在终端和bash脚本中运行docker exec有什么区别

linux - 如何在我的应用程序的目录树中使源位置独立?

linux - 通过 HTTP 运行更高权限命令的合适方法是什么

mysql - 使用 like 和 % 的 SQL 错误