分页: 1 / 2
急!在线等shell编程一个小小问题
发表于 : 2010-12-25 0:49
由 wangjingchu
谢谢大侠帮忙!
现在需要编写一个shell脚本来实现一个功能,就是将一个文件里得“case”后面一行插入“//case n”并保存到原文件里
我是菜鸟,网上查了好久都没有答案啊。。。
请先看看,下面这个代码的循环哪里出错了,总是报错:
代码: 全选
./project: line 9: ((: 1 < : 语法出错:此处需要运算符 (error token is "< ")
代码: 全选
sed -i -e '/case (stato)/i\
//------------------------------------------------\n//Start of a state machine for (stato)\n// Case 1:' b01.v
str=`sed -n ":" b01.v`
let count=1
while(($count < $str))
do
sed -i -e '/Case $count/i\
//Case $count+1' b01.v
$count=$count+1
done
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 0:53
由 lilydjwg
是不是这样?
代码: 全选
sed -i -e '/case/a\
//case n' your_files
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 1:08
由 wangjingchu
lilydjwg 写了:是不是这样?
代码: 全选
sed -i -e '/case/a\
//case n' your_files
高手啊~~~~谢谢啊
还有就是,如何连续循环得在有“:”的那行末尾插入 case n
那个n是从1开始,一直到文件里得“:”的数量的那个数
不知道用循环怎么写
举个例子,比如文中有8个冒号,就可以搜索出冒号得数量,然后用循环来实现连续向原文件里写
case 1
case 2
case 3
case 4
case 5
case 6
case 7
case 8
然后在带有冒号得那些行得末尾加上备注“//case1”
第二个冒号那行末尾加上“//case 2”
依次类推,谢谢拉
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 8:31
由 trigger
给原始文件片段,然后给期望文件片段
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 9:13
由 wangjingchu
trigger 写了:给原始文件片段,然后给期望文件片段
代码: 全选
begin
stato=a;
outp<=0;
overflw<=0;
end
else
case (stato)
a: begin
if (line1 && line2) stato=f;
else stato=b;
outp<=line1^line2;
overflw<=0;
end
e: begin
if (line1 && line2) stato=f;
else stato=b;
outp<=line1^line2;
overflw<=1;
end
b: begin
if (line1 && line2) stato=g;
else stato=c;
outp<=line1^line2;
overflw<=0;
end
f: begin
if (line1 || line2) stato=g;
else stato=c;
outp<=~(line1^line2);
overflw<=0;
end
c: begin
if (line1 && line2) stato=wf1;
else stato=wf0;
outp<=line1^line2;
overflw<=0;
end
g: begin
if (line1 || line2) stato=wf1;
else stato=wf0;
outp<=~(line1^line2);
overflw<=0;
end
以上是要修改得文件,就是在 case (stato) 前插
代码: 全选
//------------------------------------------------
//Start of a state machine for (stato)
// Case 1:
// Case 2
// Case n (last): 一共有n行,n就是带有冒号行的数量
并且在每一行的
对于每一个状态, 例如, S_RESET, 变换“ S_RESET: ”到“ S_RESET: //case 1”,这样你的代码就会像:
“ S_X: //case 2”
“ S_Y: //case 3”
“ S_Z: //case 4”
谢谢拉
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 10:02
由 trigger
有人能看懂楼主在说什么吗?我看不懂。
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 10:26
由 wangjingchu
trigger 写了:有人能看懂楼主在说什么吗?我看不懂。
先看看这个循环吧,不知道哪里错了
代码: 全选
str=`sed -n ':' b01.v`
echo $str
count=1
while[$count < $str]
do
sed -i -e '/Case $count/i\
//Case $count+1' b01.v
let count=$count+1
done
总是报错,说
代码: 全选
./project: line 14: while[1 -lt 9]:找不到命令
./project: line 15: 在未预料的“do”附近出现语法错误
./project: line 15: `do '
谢谢拉
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 10:35
由 trigger
循环用
for count in `seq $str`
do
...
done
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 10:42
由 wangjingchu
trigger 写了:循环用
for count in `seq $str`
do
...
done
我的这个取值是不是也不对啊,报错说seq缺少操作数
我这个sed是想从b01.v里找出:的个数,存在str里
代码: 全选
str=`sed -n ':' b01.v`
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 10:54
由 trigger
wangjingchu 写了:trigger 写了:循环用
for count in `seq $str`
do
...
done
我的这个取值是不是也不对啊,报错说seq缺少操作数
我这个sed是想从b01.v里找出:的个数,存在str里
代码: 全选
str=`sed -n ':' b01.v`
str=`grep -c : b01.v`
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 11:09
由 wangjingchu
trigger 写了:wangjingchu 写了:trigger 写了:循环用
for count in `seq $str`
do
...
done
我的这个取值是不是也不对啊,报错说seq缺少操作数
我这个sed是想从b01.v里找出:的个数,存在str里
代码: 全选
str=`sed -n ':' b01.v`
str=`grep -c : b01.v`
多谢拉~~
不过还有个问题请教哈
就是我想在打印出 //case 1:的基础上,通过你说的那个循环来控制接着在下面打印
//case 2:
//case 3:
一直到
//case n:
我的sed的正则表达是不是没有正确指到//case 1:啊
或者还是我的那个$count + 1有问题
代码: 全选
for count in `seq $str`
do
sed -i -e "/^ Case $count:/a\
//Case $count+1:" b01.v
count=$count+1
done
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 11:16
由 trigger
你见过在for循环里面手动设置指针的?count已经迭代了,用不着那一行,删掉吧。
说实话,我根本没看懂你要干什么。
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 11:24
由 wangjingchu
trigger 写了:你见过在for循环里面手动设置指针的?count已经迭代了,用不着那一行,删掉吧。
说实话,我根本没看懂你要干什么。
就是说一个文件里已经有一行是
//Case 1:
我想再通过操作,在它后面插入
//Case 2:
//Case 3:
一直到
//Case n:
这个n是通过那个str得到的
帮我想想应该怎么循环啊……想不明白
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 11:55
由 trigger
cat lines
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
//Case 1:
sdgsdgfdg
sdg
for i in `seq 10`;do let j=i+1;sed -i -e "s#//Case $i:#&\n//Case $j:#g" lines;done
cat lines
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
//Case 1:
//Case 2:
//Case 3:
//Case 4:
//Case 5:
//Case 6:
//Case 7:
//Case 8:
//Case 9:
//Case 10:
//Case 11:
sdgsdgfdg
sdg
Re: 急!在线等shell编程一个小小问题
发表于 : 2010-12-25 12:18
由 wangjingchu
trigger 写了:cat lines
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
//Case 1:
sdgsdgfdg
sdg
for i in `seq 10`;do let j=i+1;sed -i -e "s#//Case $i:#&\n//Case $j:#g" lines;done
cat lines
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
//Case 1:
//Case 2:
//Case 3:
//Case 4:
//Case 5:
//Case 6:
//Case 7:
//Case 8:
//Case 9:
//Case 10:
//Case 11:
sdgsdgfdg
sdg
可以了~谢谢啊多多谢大神哈