![egrep 匹配组没有打印?](https://linux22.com/image/563380/egrep%20%E5%8C%B9%E9%85%8D%E7%BB%84%E6%B2%A1%E6%9C%89%E6%89%93%E5%8D%B0%EF%BC%9F.png)
我正在尝试创建一个 bash 脚本,该脚本将使用 egrep 从文件中 grep 行。我已经创建了应该对我想要的信息进行分组的正则表达式,问题是尝试获取输出。我一直在使用以下命令对其进行测试,但运行时没有打印任何内容。如何打印 -{80} 和 Disconnected 之间的多行?
egrep -E "^-{80}$\r?\n?([:ascii:]*)Disconnected from Server" testing.txt
文件:testing.txt
Connected to the server: name here
Some header text.
More text to go though...
--------------------------------------------------------------------------------
The information that I want, would be in here;
Including this line as well #$
and this one.
Disconnected from Server...
答案1
您最好使用像 awk 这样的工具。
awk '/^----+$/ {flag=1;next} /Disconnected from Server/{flag=0} flag {print}'
看:http://nixtip.wordpress.com/2010/10/12/print-lines-between-two-patterns-the-awk-way/
答案2
因为我最终解决了这个问题,所以这里有一个 sed 版本
sed -n '/^-----\+$/,/^Disonnected/ {/^----\+$/d;/^Disonnected/d;p;}' testing.txt
它对 /RE1/ 和 /RE2/ 之间的所有行进行操作,如果输入与 /RE1/ 或 /RE2/ 匹配,则将其删除,否则将其打印出来。