免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 7109 | 回复: 32
打印 上一主题 下一主题

sed替换文件中字符串,2个小菜鸟问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-18 09:36 |只看该作者 |倒序浏览
自己瞎琢磨,来求个指点:)

  1. [root@localhost tmp-sed]# ls -R
  2. .:
  3. kernel-locking  replace.sh  yet_another.sh

  4. ./kernel-locking:
  5. c188.html  c326.html  c604.html  index.html  x153.html  x210.html  x441.html  x536.html
  6. c20.html   c412.html  c613.html  x109.html   x157.html  x336.html  x450.html  x549.html
  7. c214.html  c475.html  c93.html   x122.html   x161.html  x352.html  x467.html  x590.html
  8. c27.html   c557.html  g618.html  x137.html   x173.html  x376.html  x490.html
  9. [root@localhost tmp-sed]# cat yet_another.sh
  10. #! /bin/sh

  11. filelist=`ls *html`
  12. for filename in $filelist
  13. do
  14.         sed 's/vim/html/g' $filename > $filename
  15. done


复制代码
#问题2个:
#       1, 我发现象上面这么写,原文件就变成空文件了,有没有办法解决?
#       2, 假如我不想让sed把结果打印出来,而是直接在文件中做替换,行不行?

3Q in advance

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-11-18 09:45 |只看该作者
原帖由 albcamus 于 2005-11-18 09:36 发表
#       1, 我发现象上面这么写,原文件就变成空文件了,有没有办法解决?
#       2, 假如我不想让sed把结果打印出来,而是直接在文件中做替换,行不行?


1、 IO Redirection 中,stdout 与 stderr 的管道会先准备好,才会从stdin读入
2、sed -i
不知道你什么系统,hoho

论坛徽章:
0
3 [报告]
发表于 2005-11-18 09:50 |只看该作者
原帖由 mocou 于 2005-11-18 09:45 发表


1、 IO Redirection 中,stdout 与 stderr 的管道会先准备好,才会从stdin读入
2、sed -i
不知道你什么系统,hoho


谢谢MM
饿要学习Shell了,以后会经常来请教问题

论坛徽章:
0
4 [报告]
发表于 2005-11-18 10:41 |只看该作者
应该拆解成

  1. sed 's/vim/html/g' < $filename > .tmp.sed
  2. mv -f .tmp.sed $filename
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-11-18 10:43 |只看该作者
原帖由 hightman 于 2005-11-18 10:41 发表
应该拆解成

  1. sed 's/vim/html/g' < $filename > .tmp.sed
  2. mv -f .tmp.sed $filename
复制代码


我用莫愁MM告诉的方法,也一样啊
  1. #! /bin/sh

  2. filelist=`ls kernel-locking`
  3. for filename in $filelist
  4. do
  5.         echo "processing kernel-locking/$filename..."
  6.         sed -i 's/html/vim/g' kernel-locking/$filename
  7. done

复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-11-18 10:59 |只看该作者
有些shell或低版本的不支持sed -i

论坛徽章:
0
7 [报告]
发表于 2005-11-18 11:02 |只看该作者
饿用的是bash3.0,不怕不怕

论坛徽章:
0
8 [报告]
发表于 2005-11-18 11:07 |只看该作者
莫愁,再搭车问一个(太菜,不好意思开新贴了 )

str=Core was generated by `/usr/libexec/gam_server'
我如何才能取到一对单引号之间的那个串呢?我试了echo $str |sed '/*'',结果语法上都通不过

论坛徽章:
0
9 [报告]
发表于 2005-11-18 11:27 |只看该作者
你那是一个 ` 和一个 '

awk -F"'" '{ print$2 } '

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-11-18 11:40 |只看该作者
没看过
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP