2015-01-07 5 views
1

У меня довольно сложная проблема, но здесь я пытаюсь показать упрощенную. У меня есть много строк в тексте, как это:sed regex на текст с закрывающей скобкой

' key=value ' 
'[key2=value2]' 
' key3=value3]' 
'[key4=value3,' 

Моя цель состоит в том, чтобы преобразовать эти строки в формате, как это: «ключ» -> «значение» с сохранением символов согласующие. Например: 'key3 = value3]' -> '"key3" -> "value3"]' К сожалению, многие символы могут заканчиваться, но указание завершающих символов по-прежнему остается жизнеспособным, чем попытка определить не завершение.

Это как далеко я получил:

$ echo ' key1=value1' | sed -E -e 's/([^\t []+)=(.+)(\[|$|[ \t])/"\1" -> "\2"\3/g' 

У меня нет никаких проблем с моим решением, кроме закрывающей скобки (]) всегда рассматриваются как нетерминальный характер и имеет преимущество над другими, как это:

' key1=value1] ' -> '"key1" -> "value1]"' instead of this: '"key1" -> "value1"]' 

ответ

2

Я бы разбить его на более мелкие шаги, вместо того, чтобы пытаться построить одно огромное выражение:

sed -E ' 
    s/^([^=]+)=(.*)/"\1" -> "\2"/ 
    s/^"([[:blank:][])/\1"/ 
    s/([][:blank:]])"$/"\1/ 
' file 
"key" -> "value" 
["key2" -> "value2"] 
"key3" -> "value3"] 
["key4" -> "value3," 
Смежные вопросы