免费注册 查看新帖 |

Chinaunix

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

sed 把文件内容插入匹配行之前,可以简化吗?[已解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-10 12:54 |只看该作者 |倒序浏览
本帖最后由 WisdomFusion 于 2012-07-11 14:58 编辑
  1. sed -e '/REGEX/{h;r filein' -e 'g;N;}' fileout
复制代码
大家是怎么解决sed1line的r命令错误的?

谢谢

论坛徽章:
0
2 [报告]
发表于 2012-07-10 12:57 |只看该作者
  1. sed '/[0-9]/{h;r filein;g;N;}' fileout
  2. sed: -e expression #1, char 0: unmatched `{'
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
3 [报告]
发表于 2012-07-10 15:20 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2012-07-10 17:21 |只看该作者
回复 3# zooyo


    匹配某行,r命令把文件内容放到pattern space,后,N命令不是读取下一行吗?


[root@localhost ~]# sed '/33/{N};q;' test
11
[root@localhost ~]# sed '/33/N;s/\n//' test
11
22
3344
55

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2012-07-10 18:23 |只看该作者
完全搞错了。

论坛徽章:
0
6 [报告]
发表于 2012-07-10 21:45 |只看该作者
回复 5# blackold


    愿闻其详!谢谢

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
7 [报告]
发表于 2012-07-11 08:17 |只看该作者
WisdomFusion 发表于 2012-07-10 17:21
回复 3# zooyo


放入PS里干什么?

论坛徽章:
0
8 [报告]
发表于 2012-07-11 08:51 |只看该作者
本帖最后由 WisdomFusion 于 2012-07-11 08:53 编辑

回复 7# waker


    awk & sed 2/e里如是:

6.1.1 Append Next Line
The multiline Next (N) command creates a multiline pattern space by reading a new line of input and appending it to the contents of the pattern space. The original contents of pattern space and the new input line are separated by a newline. The embedded newline character can be matched in patterns by the escape sequence "\n". In a multiline pattern space, the metacharacter "^" matches the very first character of the pattern space, and not the character(s) following any embedded newline(s). Similarly, "$" matches only the final newline in the pattern space, and not any embedded newline(s). After the Next command is executed, control is then passed to subsequent commands in the script.


那么,
  1. sed -e '/REGEX/{r filein' -e ';N}' fileout
复制代码
/REGEX/ 匹配后,进入{ }
先r把filein内容放入pattern space
再N把当前 /REGEX/ 匹配的行append到 multiline pattern space里?

另外,r命令用-e分隔,有没有别的办法解决2楼的错误?放一行上。

请教

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
9 [报告]
发表于 2012-07-11 09:28 |只看该作者

    r 与file之间必须有一个space, 该space后直到\n的所有东西,包括前导的空白字符
    和中间的空白符,都看作是文件名的组成部分。


   r 读入的内容并没有放到 Pattern Space。

论坛徽章:
0
10 [报告]
发表于 2012-07-11 09:38 |只看该作者
感谢黑哥的回复!

回复 9# blackold


r 与file之间必须有一个space, 该space后直到\n的所有东西,包括前导的空白字符和中间的空白符,都看作是文件名的组成部分。

谢谢,那只能 -e 和 -e 这样分开了。

r 读入的内容并没有放到 Pattern Space。

不放到Pattern Space,直接输出,而后N处理匹配行及其下一行,这样就是在r输出的位置之后了,是这样理解吧?

11
22
33
44
55
66

===

'/33/r b
N'

这们就是定位到/33/,先不作任何处理,r读取文件后输出
N对pattern space处理,把匹配行的下一行append到pattern space中,这样pattern space里就有两行(匹配行及其下一行)

这样理解对吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP