如何绘制多行以获取所有线程内容



如何对多行进行Grep以获取该线程下的所有行。我已经试过了grep-A,-B,-C,但这似乎比我需要的要多,有时甚至要少。

$cat text.txt
=====================================================================
[11-23-18 10:07:01:119]::Thread(ABC):request returned
[11-23-18 10:07:01:120]::Thread(ABC):Sending packet 'POST /aq/ConManager HTTP/1.1
Host: localhost:192.168.1.1
User-Agent: gSOAP/2.7
Content-Type: text/xml; charset=utf-8
Content-Length: 1149
Connection: keep-alive
Accept-Encoding: gzip, deflate
SOAPAction: ""
[11-23-18 10:07:01:121]::Thread(XYZ): doing request
[11-23-18 10:07:01:122]::Thread(XYZ): request returned
================================================================

现在,如果我使用grep -A 10 ABC text.txt,它将输出所有其他行,如thread XYZ。其中我只想输出所有ABC线程及其行。如果我只使用grep,它将不会在ABC线程之后输出后续行。

您可以使用

awk '/^[[^][]*]::Thread(ABC)/,/^$/' file > newfile

它匹配两个模式之间的一组行,第二个匹配空行,第一个匹配:

  • ^-行的开始
  • [-一个[
  • [^][]*-除[]之外的0+个字符
  • ]-一个]
  • ::Thread(ABC)-一个::Thread(ABC)子串

请参阅在线演示。

这里有一个可能是也可能不是你想要的:

$ awk -v RS="" '/ABC/' file

输出:

=====================================================================
[11-23-18 10:07:01:119]::Thread(ABC):request returned
[11-23-18 10:07:01:120]::Thread(ABC):Sending packet 'POST /aq/ConManager HTTP/1.1
Host: localhost:192.168.1.1
User-Agent: gSOAP/2.7
Content-Type: text/xml; charset=utf-8
Content-Length: 1149
Connection: keep-alive
Accept-Encoding: gzip, deflate
SOAPAction: ""

解释:

$ awk -v RS="" '  # use empty records as record separators
/ABC/             # if there is ABC in the record, print it
' file            

最新更新