2017-01-12 4 views
-1

У меня есть ответ от завитка запроса, который выглядит следующим образом:.Как удалить некоторые символы из следующего ответа с помощью sed?

[ 
"string1", 
"string2", 
"string3" 
] 

Я хочу, чтобы удалить символы [ "] в ответ, используя СЭД, как это сделать, что я попробовал несколько комбинаций, но ни один. . работал мой отформатированный ответ должен выглядеть следующим образом:

string1 string 2 string3

+3

Является ли это массивом JSON? Не лучше ли было бы использовать [JSON parser] (https://stedolan.github.io/jq/) для его обработки? Кроме того, ЧТО ТЫ СДЕЛАЛИ? Большинство из нас с удовольствием помогут вам улучшить свое ремесло, но они менее счастливы, чем неоплачиваемый персонал по программированию. Покажите нам свою работу до сих пор в [MCVE] (http: // stackoverflow.com/help/mcve), результат, который вы ожидали, и результаты, которые вы получили, и мы поможем вам разобраться. – ghoti

+0

Прежде чем вы начнете добавлять все новые и новые требования к комментариям, пожалуйста, подумайте над своей проблемой и измените вопрос, чтобы отразить это и то, что вы пытаетесь сделать. Кроме того, вам, вероятно, следует прочитать [this] (http://stackoverflow.com/help/someone-answers). –

+0

Пожалуйста, отредактируйте свой вопрос, чтобы показать [что вы пробовали до сих пор] (http://whathaveyoutried.com). Вы должны включить [mcve] кода, с которым у вас возникают проблемы, тогда мы можем попытаться помочь с конкретной проблемой. Вы также должны прочитать [ask]. –

ответ

2

Используйте правильный JSON анализатор как jq для разбора cURL вывода. Если вы можете установить его, обработка всегда так просто,

<your-curl-response> | jq -r '.[]' 

все, что вам нужно, где -r флаг на фильтре производит сырой выход без двойных кавычек.

Используйте команду mapfile (от bash 4.0 года), чтобы сохранить его в массиве

mapfile -t jsonarray < <(<your-curl-command> | jq -r '.[]') 

Затем вы можете получить доступ к элементам, как,

printf "%s\n" "${jsonarray[0]}" 
+0

Как получить доступ к каждому элементу теперь как элемент массива. У меня есть ответ вроде: string1 string2 s tring3 . . . . stringN Теперь я хочу получить доступ к каждой строке. Как это сделать ? – saurav

+0

Да, мой ответ сейчас string1 string2 string3 . . . stringN Каждая строка в новой строке – saurav

+0

В основном мой запрос на завивки отправляет мне список объектов, которые я хочу удалить 1 на 1, используя их имя. @Inian – saurav

0
awk '{gsub(/\[|\]|"|,/,"",$0)}1' input | xargs 
string1 string2 string3 

или

curl command |awk '{gsub(/\[|\]|"|,/,"",$0)}1'| xargs 

Здесь awk выполняет все задачи поиска и замены, такие как замена [ ] , ". Как только это будет сделано, xargs принесет многострочный вывод awk в одну строку.

+0

Не могли бы вы рассказать мне, как хранить это в массиве? ie, array = (curl command | awk '{gsub (/ \ [| \] | "|, /," ", $ 0)} 1' | xargs) – saurav

+0

проверить ответ Иниана пожалуйста. –

+0

Хотя этот фрагмент кода может решить вопрос, включая объяснение * как * и * почему * это решает проблему [действительно помогло] (// meta.stackexchange.com/q/114762), чтобы улучшить качество вашего сообщения. Помните, что вы отвечая на вопрос читателей в будущем, а не только на человека, который спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и дайте указание на то, какие ограничения и допущения применяются. –

0

Вы можете использовать tr для этого:

echo $(tr -d '[\[\]",]' < your_file) 
# output: string1 string2 string3 

или

echo $(tr -d '[\[\]",]' < <(your curl command)) 
1

Использование AWK для очистки:

$ arr=($(awk -v ORS=\ 'gsub(/[\[\]\",]/,"")||1' file)) 
$ echo ${arr[*]} 
string1 string2 string3 

Объяснения:

  • awk -v ORS=\ ' Использование AWK, установить выходной разделитель записей в космос (вместо перевода строки)
  • gsub(/[\[\]\",]/,"") удалить нежелательные символы
  • ||1или один quarantees печати, даже когда нет замен сделаны
  • ' file файла

Решение ожидает, что вывод cURL будет находиться в файле (по названию file выше).

+1

Еще раз оценим мастерство в 'Awk', но по какой-то причине' JSON' разбирается в linux без 'jq', не рифмуется хорошо :) – Inian

+1

Возможно, это не JSON ... (... кто я? шучу ...) –

Смежные вопросы