2011-02-18 55 views
3

我有這樣的數據文件在awk或者grep的問題

[abc] 
def 
ghi 
[jkl] 
[mno] 

從該文件;我可以運行grep並輕鬆獲取所有內含「[」的行。我怎樣才能得到「[]」內的文字內容。

例如:

abc 
jkl 
mno 

由於

回答

2
sed -n 's/\[\(.*\)\]/\1/p' file 

說明:-n禁止將每行打印到STDOUT,但/p在正則表達式的末尾重新啓用此行爲,導致打印所有匹配行。正則表達式本身匹配括號內的所有內容,並用它替換整個行。

0

grep的 「\ [」 | SED -e 'S/\ [//' -e 'S/\] //'

+0

我得到錯誤 sed:-e表達式#1,字符5:未終止的's'命令 – shergill 2011-02-18 07:47:27

+0

我已經測試過使用cygwin,它的工作原理。看看backslahs。 – Luixv 2011-02-18 07:54:23

3

這給嘗試:

sed -n 's/\[\([^]]*\)\]/\1/p' 

awk -F "[][]" '$2 != "" {print $2}' 

grep -Po '(?<=\[)[^]]*(?=])' 
+0

如果數據與我在回答中顯示的一樣,那麼`sed`解決方案可能需要增強。 – kurumi 2011-02-18 08:06:06

0

這裏是你如何可以使用awk

$ cat file 
[abc] 
def [ xxx] 
ghi 
[jkl] 
[mno] 
[zz 
zzzz] 


$ awk 'BEGIN{RS="]";FS="["}/\[/{print $NF }' file 
abc 
xxx 
jkl 
mno 
zz 
zzzz 

紅寶石(1.9+)

ruby -0777 -ne 'puts $_.scan(/\[(.*?)\]/m)' file 

做,或者你可以只用貝殼做

$ var=$(<file) 
$ IFS="]" 
$ set -- $var 
$ for i in [email protected]; do echo ${i##*[}; done