2016-05-29 67 views
0

我有在它的文本文件看起來像這樣的麻煩之間提取文本:學習SED,不必值

ssid="sdfsdf" #psk="sdfsfsdf" psk=zzzs93j03r093ur0fjfs39uj } 

我正在學習SED,並希望用它來提取只是開始串與zzz。

不過,我覺得我可能只是抓住之間的一切「PSK =」和「}」,但是這似乎並沒有工作:

sed 's_ psk=\(.*\) }_\1_' /tmp/myfile 

我也很好奇,爲什麼這是行不通的。 PSK出現在文本兩次,但我雖然搜索 「PSK」 將從 「#psk」

回答

1

隨着GNU sed的區別:

sed 's/.* psk=\([^ ]*\).*/\1/' file 

輸出:

 
zzzs93j03r093ur0fjfs39uj 

見:The Stack Overflow Regular Expressions FAQ

+0

嗯爲什麼WASN」我的命令是否也以我想要的方式工作? – red888

+0

添加兩個'。*':'sed's _。* psk = \(。* \)。*} _ \ 1_'/ tmp/myfile' – Cyrus

+1

啊,因爲我只匹配一些文本前後的內容我需要做的事情就是everything_before_substring()everything_after_substring對嗎? – red888

0

你的命令工作得很好,它取代了從psk=...$zzzs...,您要添加的是在前面.*

% sed 's_.* psk=\(.*\) }_\1_' 
zzzs93j03r093ur0fjfs39uj 

你可以改變你的正則表達式稍微處理情況psk沒有底:

sed 's/.*[^#]psk=\([[:alnum:]]*\).*/\1/'