LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: tahaomei

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

[复制链接]
 楼主| 发表于 2004-4-28 13:26:51 | 显示全部楼层
最初由 home_king 发表
单引号!


什么单引号阿。还是不行呢
发表于 2004-4-28 13:36:25 | 显示全部楼层
  1. str=$mystr
复制代码

改为
  1. str="$mystr"
复制代码
发表于 2004-4-28 14:13:28 | 显示全部楼层
最初由 r2007 发表
  1. str=$mystr
复制代码

改为
  1. str="$mystr"
复制代码

这是等价的,r2007兄。
发表于 2004-4-28 14:14:32 | 显示全部楼层
mystr='21.2404 ! Reduced temperature (epsilon/kb) = 36.4K'

请先参阅置顶的"命令行处理"一帖。
 楼主| 发表于 2004-4-28 14:47:34 | 显示全部楼层
最初由 home_king 发表
mystr='21.2404 ! Reduced temperature (epsilon/kb) = 36.4K'

请先参阅置顶的"命令行处理"一帖。



还是一样的错误提示
发表于 2004-4-28 14:57:47 | 显示全部楼层
最初由 tahaomei 发表
还是一样的错误提示

bash -x urscript调试一下,看什么问题!
或者用sed来解决!
 楼主| 发表于 2004-4-28 15:03:35 | 显示全部楼层
pengx@server:~> bash -x test.sh
+ mystr=21.2404    ! Reduced temperature (epsilon/kb) = 36.4K
+ mydir=/home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996
++ find /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996 -name tp_input.dat
+ gawk '{if(NR==1){print str;next}print}' str=21.2404 '!' Reduced temperature '(epsilon/kb)' = 36.4K /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996/tp_input.dat
gawk: cmd. line:2: fatal: cannot open file `!' for reading (No such file or directory)
+ mv /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996/new.dat /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996/tp_input.dat
发表于 2004-4-28 15:17:34 | 显示全部楼层
最初由 tahaomei 发表
pengx@server:~> bash -x test.sh
+ mystr=21.2404    ! Reduced temperature (epsilon/kb) = 36.4K
+ mydir=/home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996
++ find /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996 -name tp_input.dat
+ gawk '{if(NR==1){print str;next}print}' str=21.2404 '!' Reduced temperature '(epsilon/kb)' = 36.4K /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996/tp_input.dat
gawk: cmd. line:2: fatal: cannot open file `!' for reading (No such file or directory)
+ mv /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996/new.dat /home/pengx/msrwgs/slit/data/ratio13/p20/t500/width0.996/tp_input.dat

try it

  1. mystr='21.2404 ! Reduced temperature (epsilon/kb) = 36.4K'
  2. for...
  3. awk -v str="$mystr" '{if(NR==1){print str;next}print}' $i
  4. done
复制代码

try sed

  1. mystr='21.2404 ! Reduced temperature (epsilon/kb) = 36.4K'
  2. for ...
  3. sed -e '1d' -e "2i\\
  4. ${mystr}" $i
  5. done
复制代码
发表于 2004-4-28 17:36:58 | 显示全部楼层
最初由 home_king 发表
这是等价的,r2007兄。

哦? 如果我们都是默认在bash前提下讨论,那么请教主再想一下,这两句还是有差别的.
发表于 2004-4-28 17:43:08 | 显示全部楼层
最初由 r2007 发表
哦? 如果我们都是默认在bash前提下讨论,那么请教主再想一下,这两句还是有差别的.

更准确地说,就楼主问题而言,这是等价的。
注意,把str=xxx传递给awk命令之前,必须经过bash的命令行处理。
1. ""双引号限制了命令行处理为参数替换,变量替换以及算术替换,但完整的命令处理也会经历这三步,双引号不起作用
2.双引号不会传递给awk,所以加与不加双引号,无所谓。

如果r2007兄有更高明的见解,请指教,晚辈洗耳恭听。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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