2011-07-28 40 views

回答

1

這是我想出了。不是第一次,但工作,沒有最後的grep。

grep 'mykey = ' file | sed 's/.*\(mykey = [A-Za-z]*\).*/\1/' 
+1

甚至不需要grep:sed'/ mykey =/s/...' –

+0

@glennjackman我沒有關注你。什麼是「......」?如果我簡單地從我的解決方案中刪除'grep',我會得到每個不匹配的行,並且適當縮短匹配行。如果你明確地寫出你的解決方案,我相信我會學到一些東西,並且我會讚揚它。 –

+1

在sed中,「s」命令不必在每一行都進行操作:您可以指定要使用「s」的行。例如'seq 1 9 | sed'/ [2468]/s /./&&/「' - 」s「命令只能輸入偶數。在這種情況下,我不完全正確 - 從管道中刪除「grep」:'sed -n'/ mykey =/{s /.* \(mykey = [A-Za-z] * \)。 */\ 1 /; p}'' - 這會忽略任何不符合「/ mykey = /」的行 –

1

假設關鍵字是一個字和一個空格跟隨它,像這樣: 的myKey = myCoolValue

grep 'mykey' /your/file/here | sed -r 's/.*mykey = (^[ ]*) .*/\1/g' | grep .

+0

「sed -r」是做什麼的?我的sed只支持sed [-Ealn] [-i擴展名] [-e腳本] ... [-f script_file] ... [文件...] 。 – Vicky

+0

另外,如果我做了sed -s的/.* mykey =(^ [] *)。*/\ 1/g'。它說「sed:1:」s /.* errorCode =(^ [] *)。 ...「:\ 1沒有在RE中定義」 – Vicky

+0

啊,以爲你在linux上。使用-E而不是-r,它只是啓用擴展的正則表達式,雖然你可能不需要它在Mac上,不確定,試着用/ out。你不應該需要sed -s – opsguy

0

如果你手頭pcregrep,您可以在終端或者腳本中發出此命令後mykey =

$ pcregrep -o '(?<=mykey =).+' file 

正則表達式只得到所需的文本使用正回顧後,只有-o回報匹配的文本,而不是整行。

相關問題