regex - 匹配所有包含 StringA 但忽略还包含 StringB 的行
问题描述
我需要匹配文件中的模式并打印以下 2 行。我为此使用 grep -A2 。但我想忽略第一个 grep 中的一些行。
我需要第一个'grep -A2'的输出来做一些进一步的处理,所以管道到 grep -v 不会帮助我,据我所知。
$cat file.txt
stringA-hurdygurdy-andmorechars
line1
line2
stringA-hurdygurdy-stringB-andmorechars
line1
line2
stringA-hurdygurdy-andmorechars
line1
line2
我需要 grep -A2 所有具有“stringA-hurdygurdy”的行,但不是包含 stringB 的行。
我正在努力
grep -A2 ^stringA.*[^stringB].* file.txt
解决方案
您可以使用awk
:
awk '/stringA/ && !/stringB/ {n = NR+2} n >= NR' file.txt
stringA-hurdygurdy-andmorechars
line1
line2
stringA-hurdygurdy-andmorechars
line1
line2
推荐阅读
- python - 长返回类型提示和 pep8
- php - 创建查询以从 MYSQL WHERE min(i_status) = 4 中选择数据
- android - 无法观察 LiveData
- java - 倒计时锁存器不会在 DeliverCallback 中递减
- python - 在python中使用for循环创建多个类对象
- java - 如何让回收站视图不再显示相同的数据?(火力基地)(AndroidStudio)
- pandas - Google Cloud 中的请求和 Pandas
- android - 是否必须在 onDestroyView() 中将数据绑定对象设置为 null?
- c# - 我创建了一个 Windows 服务,我想在启动服务时打开一个单独的应用程序 pe notepad.exe
- json - 如何解码数组 JSON 中的数组?