您的位置:首页 > 其它

随机数字、正则表达式替换文件指定位置的数据(遍历的方法)

2010-12-30 00:53 716 查看
虽然方法有点土,不过还好结果是正确的,希望以后能写出一些出色的Shell。

记录下来,这个N个指令不懂而且走了N多弯路的成为历史的我

--------------------------------------------------------------------------------------------

#!/bin/bash
#脚本开始

function randomnum {
#脚本开始
#初始化空数组array.
set -A array

#初始化数组下标.
i=0

#开始主循环.
while true;do

#产生随机数.
rand=$(perl -e "print int rand($(($1+1)))")
[[ $rand -eq 0 ]] && continue

#向数组array中添加不重复的元素.
if ! echo ${array[*]}|tr ' ' '/n'|grep -q "/<$rand/>";then
array[$i]=$rand.
((i+=1))
else
continue
fi

#当数组array元素个数满足条件,跳出循环.
((${#array[*]}==$1)) && break
done

#导出数组.
export var=${array[*]}
set -A array $(echo $var)

random=`echo ${array[*]}|sed -e 's/ //g'|sed 's/.$//'`

#eval "$random"
#echo $random

#脚本结束,取消脚本中无用变量
unset i rand var
unset array
}

#randomnum 20
#第二部分 处理问题文件

rm -f seeven_retest
touch seeven_retest

cat seeven_test|{
while read eachline; do
#判断指定部分是否数字和"."的组和,逻辑:把“.”都去掉就是数组
eachlinepart=`echo $eachline|grep -E " /(|NAME " | cut -f3 --delimiter=' '`

echo $eachlinepart

eachlinenum=`echo $eachlinepart|sed -e 's//.//g'|sed -n 's/^[0-9]/{1,/}$/number/p'`

#echo $eachlinenum

#echo $eachlinepart|sed -e 's//.//g'|sed -n 's/^[0-9]/{1,/}$/number/p'
#isFoundnum=`echo $?`
#if test $isFoundnum -eq 0; then
#if [$eachlinenum == "number" ]; then
#if [[$eachlinenum = "number"]]; then
if [[ $eachlinenum = "number" ]]; then
#printf ""
echo "num is"
echo $eachlinenum

else
randomnum 20
echo echo $random;
#sed "s/{$eachlinepart}/{$random}/g"> seeven_retest

#cat seeven_test|sed "s/^${eachlinepart}/^${random}/gi" >seeven_retest
echo $eachline|sed "s/${eachlinepart}/${random}/gi">>seeven_retest

#cat $3|sed "s/^#${x}/${x}/gi" >$3_1 这个真的是走了大弯路了,遍历文件输出后,发现完全又被覆盖了>_<,很久没有跳出错误思维

echo "clear"

fi

# if grep -E " /(|NAME " eachline| cut -f3 --delimiter=' '|sed -e 's//.//g'|sed -n 's/^[0-9]/{1,/}$/number/p' >/dev/null 2>&1; then
# printf ""
# else
# randomlist 20
# #grep -E " /(|NAME " $eachline| cut -f3 --delimiter=' '|sed -e 's/^*/'
#
# sed 's/$eachlinepart/$random/g' seeven_test > seeven_retest
# fi
done

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: