【问题标题】:assign a portion of a word to a variable将单词的一部分分配给变量
【发布时间】:2011-09-21 17:34:02
【问题描述】:

我正在编写一个 bash 脚本。

grep -R -l "image17" *

当我通过我的循环时,image17 将更改为其他数字。当我执行上面的grep 时,我得到以下信息:

slides/_rels/slide33.xml.rels

我需要将slide33 放入一个变量中,因为我想用它来将名为image17.jpeg 的文件重命名为slide33.jpeg。我需要一些东西来检查上述格式并从幻灯片开始解析并以数字结尾。

另一个问题是 grep 语句可能会产生多个结果而不是一个。我需要一种方法来检查有多少结果,以及是否一个人做一件事,如果不止一个人做另一件事。

这是我目前所拥有的。现在我只需要将 grep 作为变量并检查它发生了多少次,如果是一次,然后执行正则表达式来获取文件名。

#!/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

【问题讨论】:

  • 请发布您已经写的内容,以便我们帮助修改
  • Mike,请点击edit 并使用正确的代码格式重新发布您的代码。然后删除您的评论...没有人会解析您发布的内容。
  • @MikePennington - 我更新了帖子。我在那里的 If 语句和 new_name 变量不起作用,但这就是我想要做的。

标签: regex linux bash terminal grep


【解决方案1】:
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 了解更多信息

这将匹配以“幻灯片”开头并以两个数字结尾的单词

grep -c 计算匹配的数量,但不打印匹配。我认为您应该计算行数以检测grep 匹配的行数,然后执行条件语句。

【讨论】:

  • 感谢 [0-9][0-9]。不知道会有多少个数字。如果低于 10 则为个位数。它们不应该是三位数。
  • 检查编辑后的答案。我建议您查看grep 手册的正则表达式部分。这对你很有帮助。
猜你喜欢
  • 2019-05-01
  • 2017-01-07
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 2019-08-18
相关资源
最近更新 更多