【发布时间】:2020-10-16 08:05:51
【问题描述】:
我正在尝试运行一个相当简单的正则表达式来清除一些主目录。背景:我试图要求我系统上的用户清除他们不必要的文件以清理他们的主目录上的空间,所以我想用诸如 Anaconda / Miniconda 安装脚本之类的脚本通知用户,他们可以将其清除。
为了生成可能需要此类电子邮件的用户列表,我尝试运行一个简单的正则表达式来列出包含此类安装脚本的所有主目录。所以我的假设是以下就足够了:
for d in $(ls -d /home/); do
if $(ls $d | grep -q "(Ana|Mini)conda[23].*\.sh"); then
echo $d;
fi;
done;
但是在运行这个之后,它完全没有结果,很遗憾。看了一会儿,我注意到grep 并没有像我期望的那样解释正则表达式。以下:
echo "Lorem ipsum dolor sit amet" | grep "(Lorem|Ipsum) ipsum"
根本没有匹配结果。这将解释为什么上面的 forloop 也不起作用。
那么我的问题是:是否可以匹配指定的正则表达式(Ana|Mini)conda[23].*\.sh,就像匹配https://regex101.com/r/yxN61p/1 中的字符串一样?或者是否有其他方法可以使用 bash 中的简单 for 循环来查找在其 homedir 中有此类文件的所有用户?
【问题讨论】:
-
请注意,您可能正在重新发明
find命令
标签: regex bash shell for-loop sh