我有一个非常复杂的问题,但在这里我尝试展示一个简化的问题。 我在这样的文本中有很多字符串:
' 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"]'
答案 0 :(得分:2)
我会把它分解成更小的步骤,而不是试图构建一个巨大的表达式:
sed -E '
s/^([^=]+)=(.*)/"\1" -> "\2"/
s/^"([[:blank:][])/\1"/
s/([][:blank:]])"$/"\1/
' file
"key" -> "value"
["key2" -> "value2"]
"key3" -> "value3"]
["key4" -> "value3,"