我可以
{(.+)}
-->\1
和"(.+)"
-->\1
, 或({.+}|".+")
-->\1
。
我会这样做{(.+)}|"(.+)"
--> \1
?
$ echo "\"x\"" | sed -E 's/"(.+)"/\1/'
x
$ echo "{x}" | sed -E 's/{(.+)}/\1/'
x
$ echo "\"x\"" | sed -E 's/^(\{.+\}|".+")$/\1/'
"x"
答案1
一种方法可以是
sed -E '/^(\{.+\}|".+")$/s/.(.+)./\1/'
或这个:
sed -E 's/\{(.+)\}|"(.+)"/\1\2/'
或者,如果 Perl 是一个选项,那么它可以变得更简单。
答案2
你可以用这个代替:
$ echo '{x}' | sed -E 's/^["{](.+)["}]$/\1/'
x
$ echo '"x"' | sed -E 's/^["{](.+)["}]$/\1/'
x
您可以在您的模式中看到(\{.+\}|".+")
括号和引号里面捕获组,当您要捕获的是之间他们。