【发布时间】:2010-12-25 21:29:33
【问题描述】:
我在sh (Mac OSX 10.6) 中有这个小脚本来查看文件数组。 Google 目前已停止提供帮助:
files="*.jpg"
for f in $files
do
echo $f | grep -oEi '[0-9]+_([a-z]+)_[0-9a-z]*'
name=$?
echo $name
done
到目前为止(显然,对你来说,shell 专家)$name 仅包含 0、1 或 2,这取决于 grep 是否发现文件名与提供的内容匹配。 我想要捕获括号内的内容 ([a-z]+) 并将其存储到变量中。
如果可能,我希望只使用grep。如果没有,请不要使用 Python 或 Perl 等。sed 或类似的东西 - 我是 shell 新手,想从 *nix 纯粹主义者的角度来攻击它。
另外,作为一个超酷的奖励,我很好奇如何在 shell 中连接字符串?我捕获的组是存储在$name中的字符串“somename”,我想在它的末尾添加字符串“.jpg”,我可以cat $name '.jpg'吗?
如果你有时间,请解释一下发生了什么。
【问题讨论】:
-
grep 真的 比 sed 更纯粹的 unix 吗?
-
啊,不是故意的。我只是希望可以使用我在这里专门尝试学习的工具找到解决方案。如果使用
grep无法解决,那么sed会很棒,如果可以使用sed解决。 -
我应该在那个 btw 上放一个:) ...
-
嘘,今天我的脑子太炸了哈哈。
-
@martinclayton 这将是一个有趣的论点。我确实认为 sed,(或者准确地说是 ed)会更旧(因此更纯粹?也许?) unix,因为 grep 从 ed 表达式 g(lobal)/re(gular expression)/p(rint) 派生它的名称。