LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: tahaomei

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

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

在for里,这种差别就很明显

  1. /home/javalee/myperl#str="a f f"
  2. /home/javalee/myperl#echo $str
  3. a f f
  4. /home/javalee/myperl#for i in [color=red]$str[/color];do echo $i;done
  5. a
  6. f
  7. f
  8. /home/javalee/myperl#for i in [color=red]"$str"[/color];do echo $i;done
  9. a f f
  10. /home/javalee/myperl#echo $0
  11. -ksh

复制代码
发表于 2004-4-28 17:46:17 | 显示全部楼层
最初由 javalee 发表
在for里,这种差别就很明显

  1. /home/javalee/myperl#str="a f f"
  2. /home/javalee/myperl#echo $str
  3. a f f
  4. /home/javalee/myperl#for i in [color=red]$str[/color];do echo $i;done
  5. a
  6. f
  7. f
  8. /home/javalee/myperl#for i in [color=red]"$str"[/color];do echo $i;done
  9. a f f
  10. /home/javalee/myperl#echo $0
  11. -ksh

复制代码

当然,这里是换行符是否过滤的区别,两码事。
发表于 2004-4-28 17:48:59 | 显示全部楼层
请教主自行测试
  1. mystr='part1 part2'
  2. awk '...' str=$mystr urfile
  3. awk '...' str=part1 part2 urfile
  4. awk '...' str="$mystr" urfile
  5. awk '...' str="part1 part2" urfile
复制代码
发表于 2004-4-28 17:49:20 | 显示全部楼层
最初由 tahaomei 发表
还是一样的错误提示

  1. mystr='21.2404 ! Reduced temperature (epsilon/kb) = 36.4K'
  2. echo $mystr
复制代码

贴出结果来看看~~~
发表于 2004-4-28 18:40:13 | 显示全部楼层
to r2007兄:
你的处理是正确的。

如果不加上双引号,bash的处理结果如下:
gawk {if(NR==1){print str;next}print} str=21.2404 ! Reduced temperature (epsilon/kb) = 36.4K filename.txt
显然,出现了多余的空格,bash就会提示错误:

  1. debian:/tmp/hihi# gawk '{if(NR==1){print str;next}print}' str=$mystr hihi.txt
  2. gawk: cmd. line:2: fatal: cannot open file `!' for reading (没有那个文件或目录)
复制代码


如果加上了双引号,那么将把21.2404 ! Reduced temperature (epsilon/kb) = 36.4K作为一个字符串赋值给str。

其实,基于这个原理,也可以这样做:
gawk '{if(NR==1){print str;next}print}' "str=$mystr" $i
这是awk的经典作法。

ps:鉴于学业,最近很少时间使用linux系统,所以没能调试过自己的脚本,请各位见谅。
发表于 2004-4-28 18:48:48 | 显示全部楼层
最初由 r2007 发表
请教主自行测试
  1. mystr='part1 part2'
  2. awk '...' str=$mystr urfile
  3. awk '...' str=part1 part2 urfile
  4. awk '...' str="$mystr" urfile
  5. awk '...' str="part1 part2" urfile
复制代码

知其然,也要知其所以然。
r2007兄,你的技术阅历很深,希望以后能把你的经验总结成理论,向大家讲述,这样我们会收获更多。

ps: 我总很懊恼,学业繁重,挤出一点点时间来使用Linux都困难。
发表于 2004-4-28 19:38:10 | 显示全部楼层
说来惭愧,我的表述能力不行,今后一定努力^_^
发表于 2004-4-28 22:11:39 | 显示全部楼层
最初由 r2007 发表
说来惭愧,我的表述能力不行,今后一定努力^_^

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

本版积分规则

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