2012-03-05 24 views
2

我想用sed/bash製作一個簡單的wikitext解析器。當我運行Sed子表達式不能按預期工作

echo "London has [[public transport]]" | sed s/\\[\\[[A-Za-z0-9\ ]*\\]\\]/link/ 

它給了我London has link 但是當我嘗試使用標記子表達式使用來獲得括號中的內容

sed s/\\[\\[\([A-Za-z0-9\ ]*\)\\]\\]/\1/ 

它只是給我London has [[public transport]]

回答

2

這是因爲正則表達式不匹配。

由於您並未將您的sed表達式放在引號中,因此您必須對shell進行雙重轉義斜線 - 這就是爲什麼您有\\[而不是\[

現在sed正雜表達式(基本的正則表達式),捕獲括號在正則表達式\(\)表示。由於您在沒有用引號括起來的情況下將其輸入到外殼中,因此您需要轉義反斜槓。而且,由於Bash解釋括號,你必須逃脫他們太:

echo "London has [[public transport]]" | sed s/\\[\\[\\\([A-Za-z0-9\ ]*\\\)\\]\\]/\\1/ 

強烈建議你只附上您的sed表達的單引號,便於書寫的:

echo "London has [[public transport]]" | sed 's/\[\[\([A-Za-z0-9\ ]*\)\]\]/\1/' 

容易得多吧?

+0

請原諒我的無知,試着用引號和它的工作。感謝您及時的回覆 – isf 2012-03-06 00:16:42

相關問題