2016-05-12 10 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(2番目の回答)が役立つ可能性があります。 –

答えて

3

使用

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

すべての個々のrem() Sを除去します。 [^()]ブラケット式(POSIX用語を使用する場合)は、()以外の任意の文字に一致します。

パターンはの詳細:

  • rem\( - リテラルrem(
  • ([^()]*)と一致 - (以外の0個以上の文字に一致するグループ1と)
  • \) - リテラル)

\1は、置換後の結果の文字列にキャプチャされたテキストを復元します。

関連する問題