我正在尝试创建一个 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/ 匹配,则将其删除,否则将其打印出来。