LinuxSir.cn,穿越时空的Linuxsir!

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

shell命令中,行前如何添加一字符串?

[复制链接]
发表于 2007-1-18 15:57:46 | 显示全部楼层 |阅读模式
如题,我的一个文件名为test,其内容为:

/export/home/pengx/testsh/w_4.2588nm/p_2.50e+01kpa/a.out
/export/home/pengx/testsh/w_4.2588nm/p_4.00e+01kpa/a.out
/export/home/pengx/testsh/w_4.2588nm/p_5.50e+01kpa/a.out
/export/home/pengx/testsh/w_4.2588nm/p_7.00e+01kpa/a.out

想执行如下三个操作:
1.去掉每行行尾中的字符串 “a.out”
2.每行行首前添加字符串 “cd ”
3.隔行添加字符串 “nohup ./a.out &”

最终的文件应该为:

cd /export/home/pengx/testsh/w_4.2588nm/p_2.50e+01kpa/
nohup ./a.out &
cd /export/home/pengx/testsh/w_4.2588nm/p_4.00e+01kpa/
nohup ./a.out &
cd /export/home/pengx/testsh/w_4.2588nm/p_5.50e+01kpa/
nohup ./a.out &
cd /export/home/pengx/testsh/w_4.2588nm/p_7.00e+01kpa/
nohup ./a.out &

请问shell中该如何用awk或者sed命令写该段代码??
发表于 2007-1-18 16:06:21 | 显示全部楼层
sed -e 's/^/cd /g' -e 's/a.out/\nnohup .\/a.out \&/g'
回复 支持 反对

使用道具 举报

发表于 2007-1-18 16:10:19 | 显示全部楼层
sed -e 's/^/cd /g' -e 's/\(a.out\)/\nnohup .\/\1 \&/g'

好像更地道一点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 16:31:35 | 显示全部楼层
Post by seamonkey
sed -e 's/^/cd /g' -e 's/\(a.out\)/\nnohup .\/\1 \&/g'

好像更地道一点。



写得真帅啊。哈哈

我试下看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 16:34:47 | 显示全部楼层
Post by seamonkey
sed -e 's/^/cd /g' -e 's/\(a.out\)/\nnohup .\/\1 \&/g'

好像更地道一点。



写得真帅啊。哈哈

我试下看
回复 支持 反对

使用道具 举报

发表于 2007-1-18 16:39:09 | 显示全部楼层
这个:
sed -n -e 's/^/cd /g;s/a.out/ \&\& nohup .\/a.out \&/g;p'

不完全符合要求,结果:
cd /export/home/pengx/testsh/w_4.2588nm/p_2.50e+01kpa/ && nohup ./a.out &
cd /export/home/pengx/testsh/w_4.2588nm/p_4.00e+01kpa/ && nohup ./a.out &
cd /export/home/pengx/testsh/w_4.2588nm/p_5.50e+01kpa/ && nohup ./a.out &
cd /export/home/pengx/testsh/w_4.2588nm/p_7.00e+01kpa/ && nohup ./a.out &

执行的效果应该是一致的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 16:49:30 | 显示全部楼层
Post by seamonkey
sed -e 's/^/cd /g' -e 's/\(a.out\)/\nnohup .\/\1 \&/g'

好像更地道一点。



这个\1 是数字的1还是字母的l??

是什么意思呢?

是指匹配的(a.out)里面的a.out吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 16:50:44 | 显示全部楼层
还有,a.out应该写成 a\.out 吧?
回复 支持 反对

使用道具 举报

发表于 2007-1-18 16:51:30 | 显示全部楼层
这样符合要求了:
  1. sed -n -e 's/^/cd /g;s/a.out//g;p' filename | awk '{printf("%s\n%s\n",$0,"nohup ./a.out &")}'
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-1-18 16:53:47 | 显示全部楼层
Post by tahaomei
这个\1 是数字的1还是字母的l??

是什么意思呢?

是指匹配的(a.out)里面的a.out吗?


字母1。
\1是第一个匹配,就是(a.out)
不过他的方法在我的机器上有问题,输出是这样的:


  1. cd /export/home/pengx/testsh/w_4.2588nm/p_2.50e+01kpa/nnohup ./a.out &
  2. cd /export/home/pengx/testsh/w_4.2588nm/p_4.00e+01kpa/nnohup ./a.out &
  3. cd /export/home/pengx/testsh/w_4.2588nm/p_5.50e+01kpa/nnohup ./a.out &
  4. cd /export/home/pengx/testsh/w_4.2588nm/p_7.00e+01kpa/nnohup ./a.out &
复制代码


这个结果不对的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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