sed正则表达式文本与结束括号

时间:2015-01-07 19:14:59

标签: regex sed

我有一个非常复杂的问题,但在这里我尝试展示一个简化的问题。 我在这样的文本中有很多字符串:

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

我的目标是以这样的格式转换这些字符串:“key” - >保持终止字符的“价值”。例如: 'key3 = value3]' - > '“key3” - > “值3”]” 不幸的是,许多字符可以终止,但是指定终止字符仍然比尝试定义非终止字符更可行。

这是我走了多远:

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

我的解决方案没问题,除了右括号(])总是被视为非终端字符并优先于其他字符,如下所示:

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

1 个答案:

答案 0 :(得分:2)

我会把它分解成更小的步骤,而不是试图构建一个巨大的表达式:

sed -E '
    s/^([^=]+)=(.*)/"\1" -> "\2"/
    s/^"([[:blank:][])/\1"/
    s/([][:blank:]])"$/"\1/
' file
 "key" -> "value" 
["key2" -> "value2"]
 "key3" -> "value3"]
["key4" -> "value3,"