Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/session/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex bash~如何搜索目录中的文件_Regex_Bash - Fatal编程技术网

Regex bash~如何搜索目录中的文件

Regex bash~如何搜索目录中的文件,regex,bash,Regex,Bash,我有一份文件清单 shopping-list.txt our-shopping-list.txt test.txt my-test.txt 我想运行myscript shopping并获取包含单词shopping的两个文件。我想运行myscript我们的列表,只获取一个文件 现在我有这个 if [[ $fs =~ .*${*}*.* ]]; then echo $fs fi 它可以工作一点,但如果每个变量都有间隙,它就不会给我我们的购物清单,即myscript我们的清单如果

我有一份文件清单

  • shopping-list.txt
  • our-shopping-list.txt
  • test.txt
  • my-test.txt
我想运行
myscript shopping
并获取包含单词
shopping
的两个文件。我想运行
myscript我们的列表
,只获取一个文件

现在我有这个

if [[ $fs =~ .*${*}*.* ]]; then
        echo $fs
fi
它可以工作一点,但如果每个变量都有间隙,它就不会给我
我们的购物清单
,即
myscript我们的清单
如果我键入
myscript我们的清单

我有一大堆文件,想通过猜名字找到我需要的文件


我尝试应用@pacholik的代码

snippetdir="~/my_snippets/"
    for filename in $snippetdir*; do
        file=`basename "$filename"`
        fs=${file%.*}
        for i in ${*}; do
    for j in *${i}*; do
        if [[ $fs =~ .*$j*.* ]]; then
                echo $fs
            fi      
        done
        done
    done
使用justbash扩展(只需计算两次)。Bash从中加入

然后您可以迭代
$文件

for i in $files; do
    echo $i
done

这是一个简单的暴力循环

for file in *; do
    t=true
    for word in "$@"; do
        case $file in
          *"$word"*) ;; 
          *) t=false; break;;
        esac
    done
    $t && echo "$file"
done

我相信这应该可以移植到任何POSIX外壳上,并且可能超越(旧的Solaris等)。

我可以知道这个
${*}
做什么吗?ls*'shopping'*有什么问题吗?kiss
如果[[$fs=~ shopping]]
@AvinashRaj
${*}
表示任何变量。if语句的结果相同problems@choroba这与
*${*}*
相同,谢谢@pacholik我似乎不知道如何将其合并到我的代码中,你能检查一下我在回答中添加的代码吗?@relidon:Edited。我以前误解过。
for file in *; do
    t=true
    for word in "$@"; do
        case $file in
          *"$word"*) ;; 
          *) t=false; break;;
        esac
    done
    $t && echo "$file"
done