【问题标题】:Listing directories not following specific format列出不遵循特定格式的目录
【发布时间】:2021-01-02 13:06:25
【问题描述】:

我有一个任务,仅使用 bash 单行,我必须 ls 我的主目录中不遵循特定命名模式的特定目录。在我的主目录中,有一些目录的格式为 3 个小写字母后跟 3 个十进制数字。但是,还有其他目录不遵循这种格式。我必须列出这些文件并将信息输出到 txt 文件。以下是我迄今为止编写并正在试验的一些命令:

ls /home -1 | sed [^a-z][^a-z][^a-z].[^0-9][^0-9][^0-9]

ls /home -1 "[^[a-z][a-z][a-z][0-9][0-9][0-9]]"

ls /home -1 *{[^a-z][^a-z][^a-z].[^0-9][^0-9][^0-9]}*

在有人问之前,我知道通过 ls 命令的输出进行格式化和搜索不如 find 命令有效。但是我正在处理的任务要求我只能使用这些命令:ls、ps、sed、cut、paste、sort、tr、grep、awk、cat、uniq

【问题讨论】:

  • 如果您可以使用sed,请尝试使用grep -v the_valid_pattern
  • 请注意:Why not parse ls?
  • 你为什么用这么多^?只是[a-z][a-z][a-z][0-9][0-9][0-9]。为什么要在两者之间加上.
  • @KamilCuk ^ 试图匹配遵循命名模式的文件。
  • 我找到了有效的答案:/bin/ls /home -1 | grep -v "^[a-z][a-z][a-z][0-9][0-9][0-9]$"

标签: bash shell directory wildcard ls


【解决方案1】:

如果你可以先用shopt -s extglob,那么

ls -1d /home/!([a-z][a-z][a-z][0-9][0-9][0-9])

如果没有,

ls -1d /home/* | grep -v '/home/[a-z][a-z][a-z][0-9][0-9][0-9]$'

请阅读lsgrepshopt 的手册页。

如果您不明白这些工作的原因,那么您还没有学到任何东西,我们只是在为您完成您的工作......

【讨论】:

  • 并确保您了解文件通配符和基本(和扩展)正则表达式之间的区别。
  • 感谢您的关注。几个小时前我已经设法弄清楚了。问题在于我的目录中的别名。我设法通过将 unalias 命令附加到我的脚本的请求来修复它。我使用的命令是 /bin/ls /home -1 | grep -v "[a-z][a-z][a-z][0-9][0-9][0-9]"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
相关资源
最近更新 更多