2016-02-26 86 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

相關問題