2016-02-26 88 views
0
Unexpected header.nextMessage.response.statusLine.statusCode := 403 with 180 unmatched 

我想下面的文本用grep到VAR:nextMessage.response.statusLine.statusCode := 403如何“grep的”文本中间用特殊字符

我用这个命令:exp=$(grep -oP '(?<=header).+(?=with)' text.txt)但进账只有这一部分:无403 .nextMessage.response.statusLine.statusCode

+0

'echo“Unexpected header.nextMessage.response.statusLine.statusCode:= 403 with 180 unmatched”| grep -oP'(?<= header)。+(?= with)''适用于gnu grep 2.16。你使用什么版本的grep? –

+0

grep(GNU grep)2.10。但我无法更新它,因为我在特定的环境中工作,我无法更新任何东西。 emm ....我检查:“回声”它的工作 – ascentman

+0

也许它可能是问题,实际上我使用2 grep在管道中: exp =($(grep“* with *”text.txt | grep -oP '(?<= header)。+(?= with)'text.txt)) – ascentman

回答

-2

试试这个

exp=$(grep -oP '(?=nextMessage).+(?=with)' text.txt) 

exp=$(cat text.txt | grep -oP '(?=nextMessage).+(?=with)') 

都为我工作。

+0

你的正则表达式是无效的......除非你知道我不知道的东西:'(^ header)'不是行的开始。 – jkdba

+0

你是否也考虑过以前对这个问题的评论。如果你真的这么做,你会知道这并不能回答这个问题。 – jkdba

+0

我明白你的意思了,我专注于让403增加。 –

2

像你只是使用了错误的工具听起来,所有你需要的是:

$ var=$(sed 's/.*header\.\(.*\) with.*/\1/' file) 
$ echo "$var" 
nextMessage.response.statusLine.statusCode := 403 

但很难从你的问题作为当前书面告知。

当试图找出用来处理文本,其UNIX工具,请记住以下原则:

的grep = g/re/p =的ed命令 lobally搜索[R egular Ë上的表达和P rint得到的字符串。它不是编辑文本的工具。

sed = S tream ED itor =在个别行上执行简单替换。过去需要做更多的事情,并且仍然有一大堆奇怪的语言结构来让它产生,但是除了s,g和p(带-n)之外的所有东西都在20世纪70年代中期awk被发明时变得过时了。

awk =通用目的文本处理工具,在所有UNIX安装中都以sed和grep作为标准。将它用于任何不适合grep或sed类别的内容。

+0

感谢您的用户指南:)但在我的情况下,我实际上并不知道我应该使用哪种工具来满足我的要求。在一般情况下,我在日志文件中有这样的内容: @@ COMP3,INVITE_E(4),INVITE_E(4),通过 @#COMP3,意外的头在403 ,,,失败\ n 意外的header.nextMessage.response .statusLine.statusCode:= 403 180无与伦比 @#COMP4,在BYE_E意外头(1),,,失败\ n 意外头BYE_E(1)用INVITE_E(4)unmatched' 和我需要的是:从没有@#字符的行中取出一些值,并将它们放在特定位置,并放在逗号之间的上方。 – ascentman

+1

请参阅我再次提供的指南,您会发现它会告诉您使用哪个工具。你想要把一行的一部分插入另一行。这不仅仅是寻找正则表达式并打印结果,所以它不是grep的工作。这也不是一条简单的替代品,因为它在两条线上操作,所以它不是sed的工作。因此这是awk的工作。如果您用简洁,可测试,实际的样本输入和预期输出发布新问题,我们可以向您展示如何以正确的方式完成这项工作。 –

+1

感谢您的信息。我会首先尝试它:) – ascentman

相关问题