【问题标题】:detect string in bash检测bash中的字符串
【发布时间】:2015-02-06 23:08:21
【问题描述】:
sample1=`expr "$filename" : '^sample-'`
sample2=`expr "$filename" : '.*sample\.[a-zA-Z][a-zA-Z][a-zA-Z]$'`
if [ $sample1 -eq "0" ] && [ $sample2 -eq "0" ] && [[ `lsof -c unrar | grep $f` == "" ]] && [[ `lsof -c unzip | grep $f` == "" ]]
then
   ...

好的,因此我尝试使用此代码检测以 sample- 开头的文件 或以sample.$random结尾

不知道为什么,但是 sample2 不工作 我尝试检测以 sample.*** 结尾的文件,但它不起作用

【问题讨论】:

  • 请详细解释什么不起作用。我试了一下,两个expr 命令都运行良好。
  • 所以接下来的想法是文件名以 sample- 开头或以 sample.mkv 或 sample.mp4 结尾 不要移动文件
  • 这里是代码link
  • 像 Ethan 一样,我尝试了 expr 行,它对我来说效果很好。给我们一个您认为expr 行失败的filename具体示例。
  • 自从我第一次发表评论以来,您的代码更改了三次。我觉得你的问题有点不完整。请更新您的问题,添加正确的代码,告诉我们您的确切输出以及您想要实现的目标。顺便说一句:正确的缩进也有帮助:-)

标签: php linux string bash


【解决方案1】:

使用在 cmets 中找到的信息,您会对为什么此示例不匹配感兴趣:

$ expr 'benidorm.s07e06.hdtv.x264-tla-sample.mp4' : '.*sample\.[a-zA-Z][a-zA-Z][a-zA-Z]$'
0

原因是mp4 不匹配[a-zA-Z][a-zA-Z][a-zA-Z]。请尝试以下方法:

$ expr 'benidorm.s07e06.hdtv.x264-tla-sample.mp4' : '.*sample\.[[:alnum:]][[:alnum:]][[:alnum:]]$'
40

这成功了。

另外,请注意,在现代 unicode 字体世界中,不应使用诸如 [a-zA-Z] 之类的正则表达式。如果要匹配字母,请改用 [[:alpha:]] 等字符类。

【讨论】:

  • 嗯,我只是做了更多的测试,如果 .mp4 仍然移动文件,如果 .mkv 完成了,这很有趣
  • @Jonn 在计算机中,细节很重要,如果你有特定的文件名并且你想知道它们为什么匹配或不匹配某些特定的正则表达式,那么请给我详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 2011-11-02
  • 2015-10-11
相关资源
最近更新 更多