全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1197|回复: 5
打印 上一主题 下一主题

[翻译] 请教一个sed的用法

[复制链接]
跳转到指定楼层
1#
发表于 2014-4-11 00:47:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yohu 于 2014-4-11 03:04 编辑

我要替换一大段文本,里面各种符号各种换行,不想一个一个去加\和\n,我想把替换的文本保存一个文件,然后替换,应该怎么做?

搜索了半天,找到一个参数r好像可以替换,但是老是姿势不对。

  1. sed -i 's/abcde.*xyz/r file.txt/' oldfile.txt
复制代码
  1. sed -i '/abcde/,/xyz/s/r file.txt/' oldfile.txt
复制代码


我想从abcd到xyz这段直接替换成file.txt的内容,但是好像这样不对。高人来指点一下。

问题解决。。
2#
发表于 2014-4-11 01:02:03 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
3#
 楼主| 发表于 2014-4-11 01:09:24 | 只看该作者
晓白 发表于 2014-4-11 01:02
把文件拖到本地然后用批量文本替换直接换吧

不行啊,我要弄个脚本,必须在脚本里面完成。
4#
发表于 2014-4-11 10:52:36 | 只看该作者
似乎没法用sed直接替换一大段~

替换:s命令  
*  
$ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。  
*  
$ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。  
*  
$ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。  
*  
$ sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。  
*  
$ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。  
选定行的范围:逗号  
*  
$ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。  
*  
$ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。  
*  
$ sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。
5#
 楼主| 发表于 2014-4-11 12:09:35 | 只看该作者
本帖最后由 yohu 于 2014-4-11 12:10 编辑
过客 发表于 2014-4-11 10:52
似乎没法用sed直接替换一大段~

替换:s命令  


恩,我找了半天都没找到答案,最后用很笨的办法解决了。

  1. startline=`awk '/abcde/ {print NR}' oldfile.txt`
  2. endline=`awk '/xyz/ {print NR}' oldfile.txt`
  3. txtline=`expr ${startline} - 1`
复制代码

  1. sed -i "${startline},${endline}d" oldfile.txt
  2. sed -i "${txtline} r newtxt.txt" oldfile.txt
复制代码


找出开始和结束的行号,删除所有内容,再插入文本。

点评

曲线救国好厉害啊!  发表于 2014-4-11 14:32
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-11-9 06:25 , Processed in 0.071932 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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