我正在制作一个bash脚本。
grep -R -l "image17" *
当我完成循环时, image17将更改为其他一些数字。当我执行上面的grep
时,我会回复以下内容:
slides/_rels/slide33.xml.rels
我需要将slide33
放在一个变量中,因为我想用它来重命名名为image17.jpeg
的文件,称为slide33.jpeg
。我需要检查上述格式,并从幻灯片开始解析,然后以数字结束。
另一个问题是grep语句可能会产生多个结果而不是一个结果。我需要一种方法来检查有多少结果,如果一个人做一件事,如果不止一个做另一件事。
这是我到目前为止所拥有的。现在我只需要将grep作为一个变量并检查它发生了多少次,如果它是1,那么使用正则表达式来获取文件名。
#!/bin/sh IFS=$'\n'
where="/Users/mike/Desktop/test"
cd "${where}"
for file in $(find * -maxdepth 0 -type d)
do
cd "${where}/${file}/images"
ls -1 | grep -v ".png" | xargs -I {} rm -r "{}"
cd "${where}/${file}/ppt"
for images in $(find * -maxdepth 0 -type f)
do
if [ (grep -R -l "${images}" * | wc -l) == 1 ]
then
new_name=grep -R -l "slide[0-9]"
fi
done
done
答案 0 :(得分:0)
i=0
while [ $i -lt 50 ]
do
grep -R -l "image${i}"
done
这样的事情可能会有所帮助
或者,要检测类似的结构化单词,您可以
grep -R -l "slide[0-9][0-9]"
或者你可以做
grep -R -l "slide[0-9]+"
匹配至少一位数,最多匹配任何数字
在“常规表达式”部分
中查看man grep
以获取更多信息
这将匹配以“slide”开头并以两个数字结尾的单词
grep -c
会计算匹配数,但不会打印匹配项。我认为你应该计算行数以检测grep
匹配的行数,然后执行条件语句。