Обратите внимание, что вы получаете простое предупреждение.
Спецификатор преобразования "%p"
для printf ожидает аргумент void*
; pt1
имеет тип int*
.
Предупреждение хорошо, потому что int*
и void*
могут, при странных реализациях, иметь разные размеры или битовые шаблоны или что-то .
Преобразуйте int*
в void*
с актом ...
printf("%p\n", (void*)pt1);
... и все будет хорошо даже в странных реализациях.
Существует ряд инструментов, специально разработанных для манипулирования JSON из командной строки, которые будут намного проще и надежнее, чем делать это с Awk, например jq
:
curl -s 'https://api.github.com/users/lambda' | jq -r '.name'
Вы также можете сделать это с помощью инструментов, которые, вероятно, уже установлены в вашей системе, например, Python, используя json
модуль , и таким образом избежать любых дополнительных зависимостей, при этом имея преимущество правильного парсера JSON. Следующее предположение, что вы хотите использовать UTF-8, в котором должен быть закодирован оригинальный JSON и который используется большинством современных терминалов:
Python 2:
export PYTHONIOENCODING=utf8
curl -s 'https://api.github.com/users/lambda' | \
python -c "import sys, json; print json.load(sys.stdin)['name']"
Python 3:
curl -s 'https://api.github.com/users/lambda' | \
python3 -c "import sys, json; print(json.load(sys.stdin)['name'])"
Этот ответ изначально рекомендовал jsawk, который все еще должен работать, но немного более громоздкий в использовании, чем jq
, и зависит от устанавливаемого автономного JavaScript-интерпретатора, который менее распространен, чем Python-интерпретатор, так что приведенные выше ответы, вероятно, предпочтительнее:
curl -s 'https://api.github.com/users/lambda' | jsawk -a 'return this.name'
В этом ответе также изначально использовался API Twitter из вопроса, но этот API больше не работает, что затрудняет копирование примеров для тестирования, а новый API Twitter требует клавиш API, поэтому я перешел на использование GitHub API, который можно легко использовать без клавиш API. Первым ответом на исходный вопрос будет:
curl 'http://twitter.com/users/username.json' | jq -r '.text'
вот один из способов сделать это с помощью awk
curl -sL 'http://twitter.com/users/username.json' | awk -F"," -v k="text" '{
gsub(/{|}/,"")
for(i=1;i<=NF;i++){
if ( $i ~ k ){
print $i
}
}
}'
Используйте поддержку JSON Python вместо использования awk!
Примерно так:
curl -s http://twitter.com/users/username.json | \
python -c "import json,sys;obj=json.load(sys.stdin);print obj['name'];"
Вы спрашивали, как прострелить себе ногу, а я здесь, чтобы предоставить патроны:
curl -s 'http://twitter.com/users/username.json' | sed -e 's/[{}]/''/g' | awk -v RS=',"' -F: '/^text/ {print $2}'
Вы можете использовать tr -d '{}'
вместо sed
. Но их полное исключение, похоже, также дает желаемый эффект.
Если вы хотите убрать внешние кавычки, перенаправьте результат вышеуказанного через sed 's / \ (^ "\ |" $ \ ) // g '
Я думаю, что другие забили достаточную тревогу. Я буду ждать с мобильным телефоном, чтобы вызвать скорую. Пожарьте, когда будете готовы.