2016-05-12 154 views
1

我在這裏得到正確的輸出有一些麻煩。sed正則表達式替換子串

我有這個示例文本

test { 
    abc: rem(1px); 
    def: rem(2px) rem(3px); 
} 

該電流sed命令

sed -lE "s/rem\((.*)\)/\1/g" test.css 

但我的輸出看起來像這樣

test { 
    abc: 1px; 
    def: 2px) rem(3px; 
} 

而且我的目標就是這個

test { 
    abc: 1px; 
    def: 2px 3px; 
} 
+0

http://stackoverflow.com/questions/1103149/non-greedy-regex-matching-in-sed(第二個答案)可能會有所幫助。 –

回答

3

使用

sed -lE "s/rem\(([^()]*)\)/\1/g" test.css 

刪除所有個人rem()秒。 [^()]括號表達式(如果我們使用POSIX術語)匹配任何字符,但是()

圖案的詳細資料

  • rem\( - 匹配文字rem(
  • ([^()]*) - 字面) - 第1組匹配0或多於()
  • \)其他字符。

\1在更換後恢復生成的字符串中的捕獲文本。