首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配patternA,并仅在匹配patternB时打印它,包括以下行

匹配patternA,并仅在匹配patternB时打印它,包括以下行
EN

Unix & Linux用户
提问于 2018-08-25 18:46:55
回答 1查看 116关注 0票数 3

我期待得到所有的行,其中有'search_string‘+线后,+线匹配'mod’之前。

我试过:

代码语言:javascript
复制
grep -n 'mod\|search_string' ip | grep --before 1 search_string> inter  
grep -n --after 1 search_string ip >> inter  
sort -t':' -k1,1n -u inter -o op

有更好的办法吗?

文件:

代码语言:javascript
复制
mod start1  
some lines  
mod start2  
other lines  
mod start3  
 many other lines  
 search_string yada yada  
 hello  
 many other lines  
 search_string yada yada  
 bye  
mod start4  
 search_string baba baba  
 this too  
mod start5  

预期产出:

代码语言:javascript
复制
mod start3  
 search_string yada yada   
 hello  
 search_string yada yada  
 bye  
mod start4  
 search_string baba baba  
 this too
EN

回答 1

Unix & Linux用户

发布于 2018-08-26 02:36:18

如果您希望在Python脚本中这样做:

代码语言:javascript
复制
# Read file into memory.
with open('myfile.txt') as f:
    lines = [line.rstrip() for line in f]

# Loops through lines backwards, looking for string and optionally mod.
output_lines = list()
find_mod = False
for i, line in enumerate(lines[::-1]):
    if 'search_string' in line:
        output_lines.append(lines[::-1][i-1])
        output_lines.append(lines[::-1][i])
        find_mod = True
    elif find_mod and 'mod' in line:
        output_lines.append(lines[::-1][i])
        find_mod=False

print("\n".join(output_lines[::-1]))
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/464824

复制
相关文章

相似问题

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