急!在线等shell编程一个小小问题

sh/bash/dash/ksh/zsh等Shell脚本
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

急!在线等shell编程一个小小问题

#1

帖子 wangjingchu » 2010-12-25 0:49

谢谢大侠帮忙!
现在需要编写一个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
上次由 wangjingchu 在 2010-12-25 9:18,总共编辑 1 次。
头像
lilydjwg
论坛版主
帖子: 4163
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: 急!在线等shell编程一个小小问题

#2

帖子 lilydjwg » 2010-12-25 0:53

是不是这样?

代码: 全选

sed -i -e '/case/a\
//case n' your_files
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

Re: 急!在线等shell编程一个小小问题

#3

帖子 wangjingchu » 2010-12-25 1:08

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
头像
trigger
帖子: 1588
注册时间: 2006-10-25 18:08
送出感谢: 1 次
接收感谢: 0

Re: 急!在线等shell编程一个小小问题

#4

帖子 trigger » 2010-12-25 8:31

给原始文件片段,然后给期望文件片段
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

Re: 急!在线等shell编程一个小小问题

#5

帖子 wangjingchu » 2010-12-25 9:13

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
头像
trigger
帖子: 1588
注册时间: 2006-10-25 18:08
送出感谢: 1 次
接收感谢: 0

Re: 急!在线等shell编程一个小小问题

#6

帖子 trigger » 2010-12-25 10:02

有人能看懂楼主在说什么吗?我看不懂。
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

Re: 急!在线等shell编程一个小小问题

#7

帖子 wangjingchu » 2010-12-25 10:26

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
头像
trigger
帖子: 1588
注册时间: 2006-10-25 18:08
送出感谢: 1 次
接收感谢: 0

Re: 急!在线等shell编程一个小小问题

#8

帖子 trigger » 2010-12-25 10:35

循环用
for count in `seq $str`
do
...
done
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

Re: 急!在线等shell编程一个小小问题

#9

帖子 wangjingchu » 2010-12-25 10:42

trigger 写了:循环用
for count in `seq $str`
do
...
done
我的这个取值是不是也不对啊,报错说seq缺少操作数
我这个sed是想从b01.v里找出:的个数,存在str里

代码: 全选

str=`sed -n ':' b01.v`
头像
trigger
帖子: 1588
注册时间: 2006-10-25 18:08
送出感谢: 1 次
接收感谢: 0

Re: 急!在线等shell编程一个小小问题

#10

帖子 trigger » 2010-12-25 10:54

wangjingchu 写了:
trigger 写了:循环用
for count in `seq $str`
do
...
done
我的这个取值是不是也不对啊,报错说seq缺少操作数
我这个sed是想从b01.v里找出:的个数,存在str里

代码: 全选

str=`sed -n ':' b01.v`
str=`grep -c : b01.v`
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

Re: 急!在线等shell编程一个小小问题

#11

帖子 wangjingchu » 2010-12-25 11:09

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
头像
trigger
帖子: 1588
注册时间: 2006-10-25 18:08
送出感谢: 1 次
接收感谢: 0

Re: 急!在线等shell编程一个小小问题

#12

帖子 trigger » 2010-12-25 11:16

你见过在for循环里面手动设置指针的?count已经迭代了,用不着那一行,删掉吧。
说实话,我根本没看懂你要干什么。
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

Re: 急!在线等shell编程一个小小问题

#13

帖子 wangjingchu » 2010-12-25 11:24

trigger 写了:你见过在for循环里面手动设置指针的?count已经迭代了,用不着那一行,删掉吧。
说实话,我根本没看懂你要干什么。
就是说一个文件里已经有一行是
//Case 1:
我想再通过操作,在它后面插入
//Case 2:
//Case 3:
一直到
//Case n:
这个n是通过那个str得到的
帮我想想应该怎么循环啊……想不明白
头像
trigger
帖子: 1588
注册时间: 2006-10-25 18:08
送出感谢: 1 次
接收感谢: 0

Re: 急!在线等shell编程一个小小问题

#14

帖子 trigger » 2010-12-25 11:55

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
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
wangjingchu
帖子: 25
注册时间: 2008-05-17 9:56
送出感谢: 0
接收感谢: 0
联系:

Re: 急!在线等shell编程一个小小问题

#15

帖子 wangjingchu » 2010-12-25 12:18

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
回复

回到 “Shell脚本”