分页: 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”
依次类推,谢谢拉 :em06

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”

谢谢拉 :em06

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     '
谢谢拉 :em06

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`
:em11 多谢拉~~
不过还有个问题请教哈
就是我想在打印出 //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
可以了~谢谢啊多多谢大神哈 :em05