2013-10-17 30 views
1

我想過:如何匹配sed中的{{param}}?

gsed -n -e 's/{{\(.+\)}}/&/p' file 
gsed -n -e 's/{{\(.+\)}}/\&/p' file 
gsed -n -e 's/{{\(.+\)}}/\1/p' file 
... 
gsed -n -e 's/{{(.+)}}/\&/p' file 
gsed -n -e 's/{{\([^{}]+\)}}/\&/p' file 
gsed -n -e 's/{{([^{}]+)}}/\&/p' file 
... 

但他們不匹配任何東西(空輸出)。

我有一個句柄模板,並希望提取我需要傳遞給模板的所有參數。

模式和sed命令如何匹配和提取雙括號內容?

所以我想:

來自:

<div class="{{some.class}}"> 
<img src"{{img.url}}"> 
</div> 

得到:

some.class 
img.url 

更新:

gsed -n 's/^.*{{\([^{}]+\)}}.*$/\1/p' file 

不起作用

+0

在2件作品中沒有做到這一點?即'sed's /^.*{{//; s /}}.*$/'file'祝你好運。 – shellter

+0

我得到'gsed:-e表達式#1,字符18:未終止的'命令' – static

回答

4

可以使用grep -oP做到這一點:

grep -oP '\{\{\K[^}]*' file 
some.class 
img.url 

使用awk

awk -F '{{|}}' 'NF>1{print $2}' file 
some.class 
img.url 

要打印所有匹配用awk:

awk -F '{{|}}' 'NF>1{for(i=2; i<=NF; i+=2) print $i}' 
+0

對於OSX版本的grep有什麼選項'grep -oP'? 'awk'版本運作良好! – static

+0

我在'OSX 10.6.2'上,並且'grep -oP'正在工作 – anubhava

+0

hm,我得到:'usage:grep [-abcDEFG ....' – static

1

你必須脫離開口大括號:

echo '<div class="{{truc}}" {{bidule}}>' | sed -r 's/\{\{([^}]+)}}/\1/g' 
+0

gettig錯誤:'gsed:-e表達式#1,字符1:未知命令:' - '...'。沒有'-e'完全沒有輸出。 – static

+0

是的,我也得到同樣的錯誤 – anubhava

+0

現在沒有錯誤,但正如我所說 - 沒有輸出 – static