我试图列出目录中名称仅包含大写字母的所有条目。目录需要附加“/”。
#!/bin/bash
cd ~/testfiles/
ls | grep -r *.*
由于 grep 默认情况下仅查找大写字母(对吗?),因此我只是在 testfiles 下的目录中递归搜索仅包含大写字母的所有名称。
不幸的是这不起作用。
至于附加目录,我不确定why我需要这样做。有谁知道我可以从哪里开始详细解释 grep 可以做什么?此外如何解决我的问题?
不,grep 不仅仅考虑大写字母。
你的问题我有点不清楚,例如:
- 从您对 -r 选项的使用来看,您似乎想递归搜索,但您没有这么说。为简单起见,我假设您不需要;如果您需要递归,请考虑查看@twm的答案。
- 您只想查找大写(字母)。这是否意味着您不想接受任何其他(非字母)字符,但这些字符对文件名有效(如数字或破折号、点等)
- 既然你不说我not允许每行只包含一个文件,我假设它没问题(因此使用
ls -1
).
天真的解决方案是:
ls -1 | grep "^[[:upper:]]\+$"
也就是说,打印仅包含大写字母的所有行。在我打印的 TEMP 目录中,例如:
ALLBIG
LCFEM
WPDNSE
然而,这会排除像这样的文件README.TXT
or FILE001
,根据您的要求(见上文)很可能应该包括在内。
因此,更好的解决方案是:
ls -1 | grep -v "[[:lower:]]\+"
也就是说,打印所有不包含小写字母的行。在我的 TEMP 目录中,打印例如:
ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM
WPDNSE
~DFA0214428CD719AF6.TMP
最后,要“正确标记”带有尾随“/”的目录,您可以使用-F
(or --classify
) 选项。
ls -1F | grep -v "[[:lower:]]\+"
再次,示例输出:
ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM/
WPDNSE/
~DFA0214428CD719AF6.TMP
请注意,将使用不同的选项find
,如果您可以接受不同的输出(例如find ! -regex ".*[a-z].*"
),但是会有不同的输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)