查找/排除分隔符出现一定次数的所有行的 Grep 命令?

查找/排除分隔符出现一定次数的所有行的 Grep 命令?

是否有一个 Unix 实用程序可以将文件或目录列表限制为给定的最小和最大深度级别?

我有一个 git 命令,它显示文件已更改的目录的唯一列表,git diff --name-only HEAD~3 HEAD~0 | sed 's|/[^/]*$||' | uniq并且我想将输出进一步限制为一定数量的深度。有办法实现吗?

这是一个安装示例Drupal。安装或更新模块后,git 命令显示添加或更改了哪些模块。模块目录是第 4 级目录,因此应切断任何更深的目录,并应从第 4 级目录中删除重复项

sites/all/modules/table_trash
sites/all/modules/table_trash/css
sites/all/modules/table_trash/drush
sites/all/modules/table_trash/js
sites/all/modules/table_trash/libraries
sites/all/modules/table_trash/libraries/variants/js
sites/all/modules/table_trash
sites/all/modules/video_filter
sites/all/modules/views_aggregator
sites/all/modules/views_aggregator/views
sites/all/modules/views_aggregator
sites/all/modules/views_aggregator/views_aggregator_more_functions
sites/all/modules/views_php
sites/all/modules/views_php/plugins/views
sites/all/modules/views_php
sites/all/modules/views_watchdog
sites/all/modules/views_watchdog/views/handlers
sites/all/modules/views_watchdog/views/plugins
sites/all/modules/views_watchdog/views/theme
sites/all/modules/views_watchdog/views
sites/all/modules/views_watchdog

这似乎是应用 grep 命令的一般情况,该命令会删除分隔符第 N 次出现后的所有行,在本例中为“/”,但我正在寻找也可以从输出中删除重复项的东西,这就是为什么在这种情况下我需要通过uniq命令传递它。在这种情况下,最大和最小级别数都应为 4。

答案1

您可以使用这样做 - 并在此过程中消除对和 的awk需要。适当设置seduniqlimit

git diff --name-only HEAD~3 HEAD~0 | 
awk -vlimit=3 -F'/' -vOFS='/' -- '--NF == limit && !x[$0]++'

答案2

diff --name-only HEAD~3 HEAD~0 | sed -ne 's|/||5;t' -e 's||/|4p' | sort -u

您的命令行实际上已经做到了。您可以通过将替换命令添加到命令中来定位[num]模式的出现。当您est 成功替换并且未指定目标abel 时,est 会从脚本中分支出来。这意味着您所要做的就是est或更多斜杠,然后打印剩下的内容。sed s///[num]t:ltts///5p

或者,至少,它可以处理超出最大值的行。显然你也有一个最低要求。幸运的是,事情就这么简单:

sed -ne 's|/||5;t' -e 's||/|4p'

...只需将第四次出现的/on 替换为其自身,并将您的print 附加到s///替换标志上。因为任何匹配/5 次或更多次的行都已被修剪,所以包含 4 个/匹配项的行仅包含 4 个。

对于uniques来说,uniq除非它的输入被ed,否则将不起作用sort- 所以你还是可以使用sort -u

运行sed ... | sort管道打印的示例数据:

sites/all/modules/table_trash/css
sites/all/modules/table_trash/drush
sites/all/modules/table_trash/js
sites/all/modules/table_trash/libraries
sites/all/modules/views_aggregator/views
sites/all/modules/views_aggregator/views_aggregator_more_functions
sites/all/modules/views_watchdog/views

相关内容