Нужна помощь в объединении трех вызовов sed в один - PullRequest
0 голосов
/ 26 мая 2020

У меня есть переменная TR_VERSION, которая представляет собой список JSON номеров версий, который выглядит примерно так:

[
    "1.0.1",
    "1.0.2",
    "1.0.3"
]

Я хотел бы удалить все символы JSON specifici c - [, ", , и ]. Следующий код работает, но было бы здорово объединить его в один вызов sed вместо трех.

TR_VERSION=$(echo $VERSION \
| sed 's|[",]||g' \
| sed 's/\[//' \
| sed 's/\]//')

Спасибо за ответы!

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

Никогда не используйте для анализа .

Это способ go:

$ jq -r '.[]' < file.json

Вывод как и ожидалось

1.0.1
1.0.2
1.0.3
1 голос
/ 26 мая 2020

Если вы просто хотите удалить все символы ", ,, [ и ], вы можете использовать

TR_VERSION=$(echo "$VERSION" | sed 's/[][",]//g')

Или

TR_VERSION=$(sed 's/[][",]//g' <<< "$VERSION")

[][",] шаблон соответствует ], [, " или , символов.

0 голосов
/ 26 мая 2020

Если вы действительно хотите избежать парера JSON, нет необходимости использовать sed. Вы также можете сделать это с помощью

 TR_VERSION=$(tr -d '[]",' <<<$VERSION)

, который, IMHO, немного лучше читается, чем его аналог sed .

...