Regex 如何Grep多行以获取所有线程内容
如何Grep多行以获得该线程下的所有行。 我已经试过grep-A,-B,-C了,但这似乎比我需要的多,有时比我需要的少Regex 如何Grep多行以获取所有线程内容,regex,unix,grep,Regex,Unix,Grep,如何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
$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-a10abctext.txt
,它将输出所有其他行,如线程XYZ
。其中我只想输出所有ABC线程及其行。如果我只使用grep,它将不会输出ABC线程之后的后续行 您可以使用
awk '/^\[[^][]*]::Thread\(ABC\)/,/^$/' file > newfile
它匹配两个模式之间的一个行块,第二个匹配一个空行,第一个匹配:
-行的开头^
-a\[
[
-0+字符,而不是[^][]*
和[
]
-a]
]
-a::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
使用问题编辑器中的
{}
按钮格式化数据和代码,另外,请添加示例数据的预期输出。