首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式和反向匹配,并通过管道将其传递给另一个命令

使用正则表达式和反向匹配,并通过管道将其传递给另一个命令
EN

Stack Overflow用户
提问于 2011-11-27 01:32:54
回答 4查看 212关注 0票数 2

问题是,我有一个定制的bash脚本,它对指定的文件夹执行特定的操作,语法是:

代码语言:javascript
复制
myscript $1 $2 $3

其中,$1是文件夹的名称,$2是作业的其他必要数字参数。

假设我有一个包含多个文件夹的目录,例如:

代码语言:javascript
复制
a
b
c
d
ref-1
ref-2
ref-3

我只需要在文件夹上执行脚本,而不是以ref-开头。因为手动执行每个文件的脚本会花费我大量的精力,所以我想弄清楚如何使用正则表达式来限制所需的文件夹,使用反向匹配,比如"extglob",并且对于其中的每一个都使用给定的$2$3参数执行脚本。

EN

回答 4

Stack Overflow用户

发布于 2011-11-27 01:36:33

例如,您可以使用$(ls -d */|grep -v ^ref-)

票数 3
EN

Stack Overflow用户

发布于 2011-11-27 04:04:27

这可能对你有用:

代码语言:javascript
复制
ls !(ref-?)

代码语言:javascript
复制
ls !(ref*)

代码语言:javascript
复制
ls +({a..d})

或者只是

代码语言:javascript
复制
ls ?

编辑:

然后可以运行脚本,如下所示:

代码语言:javascript
复制
for first in !(ref-?); do script.sh $first $second $third; done

其中secondthird是数值参数。

票数 1
EN

Stack Overflow用户

发布于 2011-11-27 05:02:15

这对你来说应该够了-

使用find -type d选项可以将查找搜索限制在目录范围内。提供pattern with -not -name可以帮助您忽略匹配的目录。-exec option可以帮助您启动已找到的所有目录的shell脚本。{} \;只表示一个缓冲空间,供exec一次一个地执行每个目录的shell脚本。-depth n将确保它下降到n个目录级别。

代码语言:javascript
复制
find . -not -name ref\* -not -name .\* -type d -depth 1 -exec ./script.sh {} \;

更新:

我的错,我忘了处理两个用户驱动的参数。我可能不是专家,但我认为最简单的方法是将查找结果发送到一个文件,然后对该文件运行for循环。

像这样的东西-

代码语言:javascript
复制
[jaypal~/Temp]$ find . -not -name ref\* -not -name .\* -type d -depth 1 > dirlist
[jaypal~/Temp]$ for i in dirlist; do ./script.sh $i param1 param2; done

传递用户驱动参数的替代方法(如@dma_k所建议的)

代码语言:javascript
复制
[jaypal~/Temp]$ find . -not -name ref\* -not -name .\* -type d -depth 1 | xargs script.sh param1 param2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8280260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档