UNIX:使用正则表达式忽略文件或目录

时间:2016-03-28 16:29:42

标签: regex bash shell sed

我尝试编写一个脚本,它需要正则表达式来忽略文件。

例如,我想忽略包含2016的所有目录或文件,因此我将使用regex" 2016 $"变量IGN。但是我得到一个错误" sed:-e表达式#1,char 1:未知命令:`"'"

max=$(find . -type f | wc -l)
original=$(find . -type f)

for i in `seq 1 $max`
do
    check=$(find . -type f | head -n "${i}" | tail -n -1 | tr '\/' '\n' | egrep -n "${IGN}")

    if [ ! -z "$check" ]; then
        original=$(echo ${original} | sed '${i}d')
    fi

done

echo $original

2 个答案:

答案 0 :(得分:1)

<Deal> <SelectedDeal>+1</SelectedDeal> </Deal> <FundBooking> <ProductCode>J128R?</ProductCode> <ControlNumber> </ControlNumber> </FundBooking> 更好地使用globbing "2016$",所以你可以简单地

"*2016"

如果您绝对需要正则表达式,请将文件列表写入临时文件:

find . -type f -not -name \*2016

答案 1 :(得分:0)

对不起男士们,但为什么要写脚本呢? 例如:

mkdir test ; cd test
touch File1_2016 File2_2016 File3_2016 File4_2011 File5_2011
mkdir Dir1_2016 Dir2_2016 Dir3_2016 Dir4_2000 Dir5_2000

现在的文件是:

> ls -l  
total 20
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir1_2016
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir2_2016
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir3_2016
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir4_2000
drwxrwxr-x 2 mahsom mahsom 4096 Mar 28 21:12 Dir5_2000
-rw-rw-r-- 1 mahsom mahsom    0 Mar 28 21:12 File1_2016
-rw-rw-r-- 1 mahsom mahsom    0 Mar 28 21:12 File2_2016
-rw-rw-r-- 1 mahsom mahsom    0 Mar 28 21:12 File3_2016
-rw-rw-r-- 1 mahsom mahsom    0 Mar 28 21:12 File4_2011
-rw-rw-r-- 1 mahsom mahsom    0 Mar 28 21:12 File5_2011

Okey,现在你想要忽略所有文件的最后一个名字是2016,True?
使用此命令:

find . -regextype sed ! -regex ".*2016$"
.
./Dir4_2000
./Dir5_2000
./File4_2011
./File5_2011

所以,你需要变量吗? 这样做:

ARR=$(find . -regextype sed ! -regex ".*2016$" | sed '1d')

这个测试适合你:)

for I in ${ARR[@]} ; do echo $I; done

注意:抱歉,我的英语不太好。我希望这个答案可以帮助你。