随机数字、正则表达式替换文件指定位置的数据(遍历的方法)
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
}
记录下来,这个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
}
相关文章推荐
- C# 关于字符串中 符合正则表达式的指定字符的替换的方法
- 正则表达式替换指定位置的字符串
- JS、replace利用正则表达式替换SQL所有参数为指定格式的数据
- php遍历替换目录下文件指定内容的方法
- JS、replace利用正则表达式替换SQL所有参数为指定格式的数据
- 利用matlab把指定字符串在原位置替换为新的字符串(替换txt文件中的部分数据)
- java正则表达式获取指定HTML标签的指定属性值且替换的方法
- java常用方法之遍历目录,删除指定文件
- 用php实现在文件指定行插入数据的方法
- 正则表达式 替换字符串 replaceAll()方法的运用
- C#简单遍历指定文件夹中所有文件的方法
- Javascript中使用replace()方法+正则表达式替换掉所有字符
- 在MySQL中用正则表达式替换数据库中的内容的方法
- JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
- 【自用】C# 遍历指定文件夹下的文件的一个简单方法
- Dreamweaver 正则表达式字符查找替换方法($1,$2使用说明)
- C 在文件指定位置更新数据
- VS2010中使用正则表达式替换时无法使用回车符的解决方法
- C#遍历指定目录下所有文件的方法
- JS、replace 利用正则表达式 ,一次性替换SQL所有参数为数据