首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按顺序增加sed输出流中的数字

按顺序增加sed输出流中的数字
EN

Stack Overflow用户
提问于 2012-11-14 21:48:36
回答 2查看 152关注 0票数 1

我有一个小的sed脚本,它应该在第一个“黄狮”出现的前面打印“动物王1:”,在第二个“黄狮”出现的前面打印“动物王2:”,在第三个“黄狮”出现的前面打印“动物王3:”。在sed中实现这一点是可能的吗?

sed和output的输入文件内容可以在这里看到:

代码语言:javascript
运行
复制
[user@T60 ~]$ cat animals.txt 
red cat
blue dog
yellow lion
brown tiger
black hippo
yellow lion
white zebra
yellow lion
[martint@martint ~]$ cat sed-test.sh 
#!/usr/bin/env bash

sed 's/\(.*lion\)/\
\
animal king 1:\
\
\1 /' < "animals.txt"
[user@T60 ~]$ ./sed-test.sh 
red cat
blue dog


animal king 1:

yellow lion 
brown tiger
black hippo


animal king 1:

yellow lion 
white zebra


animal king 1:

yellow lion 
[user@T60 ~]$ 

正如你所看到的,“动物之王”的数字在所有三个事件中都是"1“。有没有办法在sed中的每个".*lion“匹配后将这个值加一?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-15 00:06:52

这可能适用于您(GNU sed):

代码语言:javascript
运行
复制
sed -re '/^.*lion/!b;w lion_file' -e 'g;s/[0-9]9*$/\n&/;h;y/0123456789/1234567890/;G;s/^.*\n(.*)\n(.*)\n.*/\2\1/;s/^(0*)\n*$/1\1/;h;s/^.*/\n\nanimal king &:\n/;R /lion_file' file

这有点作弊,因为它使用一个临时文件来保存lion行。

票数 3
EN

Stack Overflow用户

发布于 2012-11-15 03:43:46

awk的可读性更好:

代码语言:javascript
运行
复制
awk '/lion/ {printf("\nanimal kingdom %d:\n\n", ++n)} 1' animals.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13380060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档