LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1170|回复: 11

一个关于sed的问题,谢谢!

[复制链接]
发表于 2006-11-17 14:15:09 | 显示全部楼层 |阅读模式
我在可执行文件test中加入下面一句话:
  
   sed '$1,$2 s/^/*/'  $3 > out.log

然后执行:

   ./test  7  16  file.log

目的是在文件file.log的7到16行的行首添加 *号。运行时报错:

   sed: -e expression #1, char 2: Unknown command: `1'

不知为何? 若要实现上述功能应该怎么做?
谢谢!
发表于 2006-11-17 14:55:39 | 显示全部楼层
主要是在sh里的表达不对。虽然在命令行可以。但是。到sh里就不行了。我把你的改了一下。你试试。看行不??我的是:
sed -e '/$1/,/$2/p' -e 's/^/*/' $3 > b.log
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-17 18:27:59 | 显示全部楼层
谢谢!
报错信息没有了,但结果还是不对,好像只执行后半句
回复 支持 反对

使用道具 举报

发表于 2006-11-17 20:35:33 | 显示全部楼层
我实验过了。对的阿。怎么会不对哪?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-18 09:16:52 | 显示全部楼层
您好!
附件中是我的运行文件及结果。 其中:

script.bmp为linux终端运行命令;
test.tar为运行文件及结果。

目的是在文件netlist的23到32行行首添加* ,可结果显示都添加了。
不知问题出在哪?谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-11-20 19:57:18 | 显示全部楼层
你用一下这个看行不: awk '{if(NR<23)print $0;if(NR>=23&&NR<=32)print "*"$0;if(NR>32)print $0}' file>file.log
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-20 22:10:49 | 显示全部楼层
谢谢!
这样确实是可以的。其实用sed也可以:

    sed '23,32s/^/*/'  file > file.log

但是如果要修改的不是23~32行,每次都必须到文件中修改相应的行号参数,比较麻烦。 我想是否可以将上述行号作为输入变量, 就像我上面问题中提出的一样, 这样每次仅在命令行中输入带参数的shell命令就可以了
回复 支持 反对

使用道具 举报

发表于 2006-11-21 12:30:09 | 显示全部楼层
sed的:
#!/bin/sh
sed ''$1','$2'{s/^/*&/}' $3>$3.log
回复 支持 反对

使用道具 举报

发表于 2006-11-21 14:18:53 | 显示全部楼层
awk的:
#!/bin/sh
num1=$1
num2=$2
file=$3
awk '{if(NR<'$num1')print $0;if(NR>='$num1'&&NR<='$num2')print "*"$0;if(NR>'$num2')print $0}' $file>bb.log
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-21 22:10:35 | 显示全部楼层
终于解决了,太感谢你了!
有机会请你客, 呵呵。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表