将一个单词的一部分分配给变量

时间:2011-06-24 03:53:05

标签: regex linux bash terminal grep

我正在制作一个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

1 个答案:

答案 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匹配的行数,然后执行条件语句。