LinuxSir.cn,穿越时空的Linuxsir!

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

问一个sed的问题[基本解决]

[复制链接]
发表于 2004-4-16 09:49:46 | 显示全部楼层 |阅读模式
我想将一系列目录下的某个文件里的某行替换成我想要的内容,请问怎么做?

比如说,

/home/test1/test.txt
/home/test2/test.txt
/home/test3/test.txt
/home/test4/test.txt

想将这四个目录下的test.txt文件里的第二行内容换成我想要的。命令如何操作?
发表于 2004-4-16 12:29:18 | 显示全部楼层
  1. for file in $(find /home/test[1-4] -name "test.txt");do
  2.     cat $file|sed '2s/^.*$/strings/g' >newtxt
  3. done
复制代码
发表于 2004-4-16 12:33:59 | 显示全部楼层

回复: 问一个sed的问题

我给出awk的实现,自己添上重定向即可。

  1. #!/bin/sh
  2. mystr="I am home_king."
  3. for i in $(find /home -name "test.txt");do
  4.         gawk '{if(NR==2){print str;next}print}' str=$mystr $i
  5. done
复制代码
发表于 2004-4-16 19:46:15 | 显示全部楼层
try it ,use awk: ;)

  1. awk 'NR==2{$0="string"}{print}'
复制代码
 楼主| 发表于 2004-4-28 10:46:25 | 显示全部楼层

回复: 回复: 问一个sed的问题

最初由 home_king 发表
我给出awk的实现,自己添上重定向即可。

  1. #!/bin/sh
  2. mystr="I am home_king."
  3. for i in $(find /home -name "test.txt");do
  4.         gawk '{if(NR==2){print str;next}print}' str=$mystr $i
  5. done
复制代码



我的代码如下,

1 #! /bin/sh
      2 mystr="21.2404    ! Reduced temperature (epsilon/kb) = 36.4K"
      3 for i in $(find /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996 -name "tp_input.dat");do
      4          gawk '{if(NR==1){print str;next}print}' str=$mystr $i
      5 done


结果出现如下错误

gawk: cmd. line:2: fatal: cannot open file `!' for reading (No such file or directory)
 楼主| 发表于 2004-4-28 10:47:23 | 显示全部楼层
去掉! Reduced temperature (epsilon/kb) = 36.4K
就可以成功执行
怎么办?
 楼主| 发表于 2004-4-28 11:13:23 | 显示全部楼层
还有一个问题,重定向的话,只能定向到这个脚本的目录下,我要定向到相应的原文件目录下,怎么弄?这也是一个变量阿
发表于 2004-4-28 12:31:32 | 显示全部楼层
把!换成\!试试
 楼主| 发表于 2004-4-28 13:00:28 | 显示全部楼层
最初由 javalee 发表
把!换成\!试试


嘿嘿,早试了,也不行
发表于 2004-4-28 13:02:33 | 显示全部楼层
单引号!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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