【发布时间】:2017-09-20 14:12:59
【问题描述】:
我正在转换一堆 (Progress) 程序以在 linux 上使用(以前在 Windows 上使用),我正在寻找一种方法来 grep 使用大写和小写字母的程序名称,例如“skip_xref.I ”或“NO_dt2.i”。 我怎样才能做到这一点?
【问题讨论】:
我正在转换一堆 (Progress) 程序以在 linux 上使用(以前在 Windows 上使用),我正在寻找一种方法来 grep 使用大写和小写字母的程序名称,例如“skip_xref.I ”或“NO_dt2.i”。 我怎样才能做到这一点?
【问题讨论】:
这个正则表达式应该有帮助:
[a-z].*[A-Z]|[A-Z].*[a-z]
如果你想使用 grep:
grep '[a-z].*[A-Z]\|[A-Z].*[a-z]'
或
grep -E '[a-z].*[A-Z]|[A-Z].*[a-z]'
【讨论】:
LANG=C ,因为它不适用于我的默认 LANG=en_US.UTF-8。
[a-z].*.......我的意思是答案中的模式。
我不是在回答模棱两可的问题,但你可以使用 grep -i 的不区分大小写标志,
例如docker help build | grep -i dockerfile 它仍然会找到“Dockerfile”。
【讨论】:
您可以使用ls -l |grep 'pattern1\|pattern2'
(假设您在要搜索程序的目录中)
进行网络搜索以阅读更多关于一般regex 基础知识的信息,以获得您需要的模式。
【讨论】:
要查找不能使用 grep 的文件名,您需要使用 find。
您可以在 find 中使用正则表达式,但您需要匹配整个路径。以.*/\ 开始比赛会解决问题,所以没什么大不了的。
然后:
find . -regex ".*/.*[a-z]+.*[A-Z]+*.*"
将匹配至少有一个小写字符后跟一个大写字符的文件名。
如果您使用 group 来获得这种模式并且相反(切换小写和大写),您应该得到所有匹配项:
find . -regex ".*/\(\(.*[a-z]+.*[A-Z]+\)\|\(.*[A-Z]+.*[a-z]+\)\).*"
【讨论】: