sh/bash/dash/ksh/zsh等Shell脚本
-
wangjingchu
- 帖子: 25
- 注册时间: 2008-05-17 9:56
-
联系:
#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
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#2
帖子
由 lilydjwg » 2010-12-25 0:53
是不是这样?
代码: 全选
sed -i -e '/case/a\
//case n' your_files
-
wangjingchu
- 帖子: 25
- 注册时间: 2008-05-17 9:56
-
联系:
#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”
依次类推,谢谢拉

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

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

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

多谢拉~~
不过还有个问题请教哈
就是我想在打印出 //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
- 帖子: 1604
- 注册时间: 2006-10-25 18:08
#12
帖子
由 trigger » 2010-12-25 11:16
你见过在for循环里面手动设置指针的?count已经迭代了,用不着那一行,删掉吧。
说实话,我根本没看懂你要干什么。
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
-
wangjingchu
- 帖子: 25
- 注册时间: 2008-05-17 9:56
-
联系:
#13
帖子
由 wangjingchu » 2010-12-25 11:24
trigger 写了:你见过在for循环里面手动设置指针的?count已经迭代了,用不着那一行,删掉吧。
说实话,我根本没看懂你要干什么。
就是说一个文件里已经有一行是
//Case 1:
我想再通过操作,在它后面插入
//Case 2:
//Case 3:
一直到
//Case n:
这个n是通过那个str得到的
帮我想想应该怎么循环啊……想不明白
-
trigger
- 帖子: 1604
- 注册时间: 2006-10-25 18:08
#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
-
联系:
#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
可以了~谢谢啊多多谢大神哈
