将 `"(.+)"` 或 `{(.+)}` 替换为 `\1`

将 `"(.+)"` 或 `{(.+)}` 替换为 `\1`

我可以

  1. {(.+)}-->\1
  2. "(.+)"--> \1, 或
  3. ({.+}|".+")--> \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


您可以在您的模式中看到(\{.+\}|".+")括号和引号里面捕获组,当您要捕获的是之间他们。

相关内容