sed соответствует всем скобкам / открывающим / закрывающим скобкам в классе символов - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь использовать gnu sed, чтобы добавить новый символ строки после каждой квадратной скобки [ / ] или волнистой скобки { / }, но закрывающая скобка ] вызывает проблемы:

$ sed 's,\([\[\]{}]\),\1\n,g' test.json

{ "file1": {hello world}, "file2": [1,2,3,4,] }

не соответствует ни одному символу. Если я опускаю закрывающую фигурную скобку, она работает со всеми (кроме закрывающей фигурной скобки):

$ sed 's/\([\[{}]\)/\1\n/g' test.json
{
 "file1": {
hello world}
, "file2": [
1,2,3,4,] }

Что я могу сделать, чтобы избежать закрывающей фигурной скобки для соответствия этому регулярному выражению?

1 Ответ

1 голос
/ 08 ноября 2019

О выражениях в скобках стандарт гласит:

(']') теряет свое особое значение и представляет себя в выражении в скобках, если оно встречается первым в списке (после начального ('^'), если есть). В противном случае он должен заканчиваться выражением в скобках, ...

и,

Специальные символы '.', '*', '[' И '\'(, ,и соответственно) утратят свое особое значение в выражении в скобках.

Так что в этом случае вам не нужно ничего экранировать в выражении в скобках, просто сделайте ]первый в этом. Например:

$ sed 's/[][{}]/&\n/g' <<EOF
{ "file1": {hello world}, "file2": [1,2,3,4,] }
EOF

{
 "file1": {
hello world}
, "file2": [
1,2,3,4,]
 }

$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...