请教高手:shell或sed相关问题——谢谢!!!
时间:2011-07-03
来源:互联网
文本中的内容如下:
/dataSourceSyncNotify****
****
****
ID=0123456****
****
uri=/dataSourceSyncNotify
/dataSourceSyncNotify
****
****
****
ID=0123457
****
uri=/dataSourceSyncNotify
我用grep -n "0123456" myfile得到标红(在文本里唯一)所在的行号,比如为5. 然后我如何根据这个行号得到它前后离它最近的即标绿的(在文本里不唯一)两行的行号呢?
谢谢!
/dataSourceSyncNotify****
****
****
ID=0123456****
****
uri=/dataSourceSyncNotify
/dataSourceSyncNotify
****
****
****
ID=0123457
****
uri=/dataSourceSyncNotify
我用grep -n "0123456" myfile得到标红(在文本里唯一)所在的行号,比如为5. 然后我如何根据这个行号得到它前后离它最近的即标绿的(在文本里不唯一)两行的行号呢?
谢谢!
作者: wxdlut 发布时间: 2011-07-03
回复 wxdlut
是这个意思吗?
复制代码
是这个意思吗?
- echo '/dataSourceSyncNotify****
- ****
- ****
- ID=0123456****
- ****
- uri=/dataSourceSyncNotify
-
- /dataSourceSyncNotify
- ****
- ****
- ****
- ID=0123457
- ****
- uri=/dataSourceSyncNotify' |awk -v num='0123456' '/^\/dataSourceSyncNotify/{x=0;y=0}{x++}x>0&&$0~num{printf (NR-x+1)" ";y=1}y==1&&x>0&&/^uri=\/dataSourceSyncNotify/{print NR;x=0}'
- 1 6
作者: yinyuemi 发布时间: 2011-07-03
回复 yinyuemi
恩 差不多的 如果那些文本是存在一个文件里面,在myfile里面:
>cat myfile
/dataSourceSyncNotify
****
****
****
ID=0123456
****
****
uri=/dataSourceSyncNotify
/dataSourceSyncNotify
****
****
****
ID=0123457
****
uri=/dataSourceSyncNotify
我就想写个脚本,通过ID=0123456得到标绿的行号。请问一下,你的方法该如何变动一下实现这个呢?
我的做法比较笨:先通过 grep -n "0123456" > tmp.txt
读取tmp.txt,得到行号
然后,根据这个行号往前往后扫描找到标绿的行号(就是这里不知道怎么做?)
非常感谢!
恩 差不多的 如果那些文本是存在一个文件里面,在myfile里面:
>cat myfile
/dataSourceSyncNotify
****
****
****
ID=0123456
****
****
uri=/dataSourceSyncNotify
/dataSourceSyncNotify
****
****
****
ID=0123457
****
uri=/dataSourceSyncNotify
我就想写个脚本,通过ID=0123456得到标绿的行号。请问一下,你的方法该如何变动一下实现这个呢?
我的做法比较笨:先通过 grep -n "0123456" > tmp.txt
读取tmp.txt,得到行号
然后,根据这个行号往前往后扫描找到标绿的行号(就是这里不知道怎么做?)
非常感谢!
作者: wxdlut 发布时间: 2011-07-03
QUOTE:
回复 wxdlut
是这个意思吗?
yinyuemi 发表于 2011-07-03 13:29
是这个意思吗?
yinyuemi 发表于 2011-07-03 13:29
不好意思啊,我描述的不太清楚。
上述文本存在文件中,我想写一个脚本,根据ID=0123456得到前后标绿的两行(靠的最近)的行号
作者: wxdlut 发布时间: 2011-07-03
回复 wxdlut
awk -v num='0123456' '/^\/dataSourceSyncNotify/{x=0;y=0}{x++}x>0&&$0~num{printf (NR-x+1)" ";y=1}y==1&&x>0&&/^uri=\/dataSourceSyncNotify/{print NR;x=0}' urfile
红色的部分是变量的设计部分,我以0123456为变量为例的:num是变量名,0123456是变量值
awk -v num='0123456' '/^\/dataSourceSyncNotify/{x=0;y=0}{x++}x>0&&$0~num{printf (NR-x+1)" ";y=1}y==1&&x>0&&/^uri=\/dataSourceSyncNotify/{print NR;x=0}' urfile
红色的部分是变量的设计部分,我以0123456为变量为例的:num是变量名,0123456是变量值
作者: yinyuemi 发布时间: 2011-07-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28