Sed

'(.+)'{(.+)} 替換為 1

  • February 25, 2022

我可以

  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"

一種方法可以是

sed -E '/^(\{.+\}|".+")$/s/.(.+)./\1/'

或這個:

sed -E 's/\{(.+)\}|"(.+)"/\1\2/'

或者,如果 Perl 是一個選項,那麼它可以變得更簡單。

您可以改用它:

$ echo '{x}' | sed -E 's/^["{](.+)["}]$/\1/'
x
$ echo '"x"' | sed -E 's/^["{](.+)["}]$/\1/'
x

您可以在模式(\{.+\}|".+")中看到括號和引號位於擷取組內,而您要擷取的內容位於它們之間。

引用自:https://unix.stackexchange.com/questions/691640