Команда для удаления части данных JSON из каждой строки?

Нет, документация для управления заданиями удара не упоминает поддержки совместного использования или принятия заданий между различными сессиями удара.

Однако reptyr позволит Вам брать под свой контроль задание, которое было знаниями в другой сессии, которая могла бы быть достаточно близка к тому, что Вы хотите.

reptyr требует pid задания, которое Вы хотите принять, таким образом, необходимо найти тот pid сначала. Можно решить для себя, является ли это большим количеством работы, чем просто нахождение исходного экранного окна.

Это кажется, что Вы главным образом интересуетесь выполнением этого с энергией (да, Вы сказали, что vi, но я принимаю энергию, - то, что Вы выполняете под капотом). vim -r даст Вам список всех открытых сессий энергии, наряду с файлами, которые они редактируют. Прочитайте список, найдите pid, это использует файл, который Вы хотите и выполняете reptyr .

Чтобы быть полной, энергия не остановит Вас от просто редактирования файла, это уже открыто в другом месте - использование vim -r - но не забудьте перезагружать файл снова с :e когда Вы возвращаетесь к исходной сессии, таким образом, Ваши новые редактирования применяются к последней версии. энергия напомнит Вам об этом на определенных событиях.

4
23.05.2017, 15:40
4 ответа
sed '/d:/s/, d:[^}]*/ /' test.json

он пройдет через весь файл и удалит на каждой строке символом г: всю , г:.* часть до символа } (} символ останется на строке).

5
27.01.2020, 20:46

@Ответ Rush с помощью sed, вероятно, лучший способ решить эту проблему, но вот как это можно сделать с помощью awk тоже:

$ awk -F ', d.* ' '{print $1, $2}' file.txt 
{ a: 123, b: sd, c: x45 }
{ a: 5, b: bfgg, c: x4c }

Вышеуказанное использует awk для разделения данных на , d.*. В результате получаются 2 поля данных, $1 и $2, которые содержат данные, полученные в результате разделения строк AWK.

4
27.01.2020, 20:46

через Perl, который использует положительное утверждение LookAead,

$ perl -pe 's/,\s+d:\s+.*?(?= })//' file
{ a: 123, b: sd, c: x45 }
{ a: 5, b: bfgg, c: x4c }

через Python,

#!/usr/bin/python3
import sys
import re
file = sys.argv[1]
with open(file, 'r') as f:
    for line in f:
        line = re.sub(r',\s+d:\s+.*?(?= })', r'', line)
        print(line, end='')

вставьте вышеуказанный код в файле Script.py и запустить srcipt на вашем терминале по

python3 script.py /path/to/the/input/file

Вывод:

{ a: 123, b: sd, c: x45 }
{ a: 5, b: bfgg, c: x4c }
3
27.01.2020, 20:46

Если вы много делаете с преобразованием JSON в командной строке, он стоит того времени, чтобы получить ваше время, чтобы получить инструмент JQ и научиться использовать его.

http://stedolan.github.io/jq/

В то время как приведенные выше ответы показывают, что вы можете делать минимальные преобразования, не разбирающиеся JSON, в конечном итоге вы либо переименяете Buggy JSON Parser через Regexp или вернуться к использованию Родной парсер JSON на вашем языке выбора.

JQ быстрый, простой в использовании и очень удобный инструмент, чтобы иметь в вашем панели инструментов.

BWT, ваши тестовые данные неверны JSON, что усложняет решения выше. Если вы исправляете его в

{ "a":123 , "b": "sd", "c": "x45", "d": 1, "e": "" }
{ "a":5 , "b": "bfgg", "c": "x4c", "d": 31, "e": "" }

, то команда этой JQ будет хотеть хочеть

 jq -c '{a,b,c}' test.json

{"a":123,"b":"sd","c":"x45"}
{"a":5,"b":"bfgg","c":"x4c"}
3
27.01.2020, 20:46

Теги

Похожие вопросы