2013-05-20 311 views
1

我使用一個shell腳本中讀取文件,然後通過管道輸出到grep,並試圖提取包含兩個引號之間(同時排除引號)字符串之間的字符串。正則表達式匹配報價

./readFile.sh | grep -e "[\^\"]*[\?\"]" 

這將返回我正在閱讀的文件的全部內容。

我的文件組織是這樣的:

TITLE="foo" 
DATA="bar" 
SERVER="foo.bar.server" 

我這裏http://www.regular-expressions.info/lookaround.html閱讀正則表達式的教程,並試圖用超前和作爲最好的,我可以回顧後,但我不明白什麼是錯在這裏。

回答

7

檢查這個例子與grep與向後看

kent$ echo 'TITLE="foo" 
DATA="bar" 
SERVER="foo.bar.server"'|grep -Po '(?<=")[^"]*' 
foo 
bar 
foo.bar.server 

選擇是grep -Po '"\K[^"]*'

+0

這個工作,但是,我得到兩個空行之間的每個字符串的輸出 –

+0

什麼是你的'readFi的輸出le.sh'?如果它看起來與答案中的示例完全相同,則不存在空行。 – Kent

+0

你是對的它的readFile.sh –

0

如果您希望grep只返回匹配的字符串(而不是整行),則應使用-o(或--only-matching)選項。

2

我不明白爲什麼你用一個腳本文件讀取,因爲grep的處理文件工作,但它是你的自己的選擇(也許你做一些預處理)。

這提取之間是什麼'「:如果你需要擺脫

$ grep -o '".*"' <file> 
"foo" 
"bar" 
"foo.bar.server" 

'」:

$ grep -o '".*"' <file> | tr -d '"' 
foo 
bar 
foo.bar.server 
+0

以及我的腳本不只是閱讀文件,我只是讓它看起來這樣簡單的例子。 –

1

如果你想給AWK一個機會,它是非常簡單的:

awk -F '"' 'NF>2{print $2}' inFile