正则表达式差异在ls和find之间搜索1个字符串或另一个字符串

时间:2011-03-16 11:50:01

标签: regex linux bash

我有一个小脑屁,我相信有人可以快速回答。我正在使用cygwin在Windows中获取bash shell(如果有任何特性)并且在ls和find之间移动正则表达式时遇到问题。

我有一堆文件需要访问,一些启动EA_,一些启动FS_所以我可以用这样的ls列出它们

ls -l {EA,FS}_*

这也适用于wc,但是当我尝试在查找中使用它时,正则表达式似乎不正确: -

find . -iname "{EA,FS}_*"

我试图逃避{和},但这似乎也不起作用 - 我做错了什么?

干杯

MH

2 个答案:

答案 0 :(得分:4)

看起来你需要一个正则表达式而不是通常的名称glob:

find . -iregex './\(EA\|FS\)_.*'

请记住,您必须使用此语法匹配目录。从您的命令看起来,您在一个目录(没有深度)中完成所有操作,因此我提供的内容将起作用。对于更多递归搜索,您需要一个不同的正则表达式。

在Cygwin,Windows 7上进行测试:

$ find . -iregex './\(RT\|ED\).*' | head
./ED-AT-CK01-A01.xml
./ED-AT-CK02-A01.xml
./ED-AT-CL01-A01.xml
./ED-AT-CL02-A01.xml
./ED-AT-CL03-A01.xml
./ED-AT-CL04-A01.xml
./ED-AT-IL001-A01.xml
./ED-AT-IL01-A01.xml
./ED-AT-IL02-A01.xml
./ED-AT-TB02-A01.xml

答案 1 :(得分:4)

你也可以这样做

find . -type f \( -iname "ES*" -o -iname "FS_*" \)