2016-05-12 3 views
1

У меня возникли проблемы с получением правильного вывода здесь.Regex in sed для замены подстрок

У меня есть этот образец текста

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

И этот текущий патч в команду

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) соответствует любому символу, но ( и ). Подробнее

Pattern:

  • rem\( - сортируют буквенные rem(
  • ([^()]*) - буквального ) - Группа 1 соответствие 0 или более других, чем ( и )
  • \) символов.

\1 восстанавливает захваченный текст в результирующей строке после замены.

Смежные вопросы