我尝试编写一个脚本,它需要正则表达式来忽略文件。
例如,我想忽略包含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
答案 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
注意:抱歉,我的英语不太好。我希望这个答案可以帮助你。