Я пытаюсь удалить конкретный текст из файла. Я попытался использовать sed:
sed 's/.*,/{/' beta.txt | head -n5
Но не получил ожидаемого результата. Вот вход и выход, которые я получил:
{"url":"example.com","original":"ex.com","tech":"c"}
{"url":"example1.com", jkdshsjkfhdj,"dsd":"sdsd","original":"ex1.com","tech":"d"}
Полученный результат:
{"tech":"c"}
{"tech":"d"}
Я ожидаю:
{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}
Я просто хочу иметь original и все, прежде чем оно должно быть заменено на {.
Как я могу это достичь?
Еще один:
# sed 's/\".*com,//' sedtest
{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}
Изменить: используйте флаг -i, если вы хотите внести изменения в какой-либо файл. Например:
sed -i.bak 'regex_above' filename
Помещение точки в параметр -i создает резервную копию с именем Edit: в том же каталоге.
Правильный вопрос, задаваемый здесь, будет «Как хранить только определенные элементы в словаре json», потому что это именно то, что видно на ваших примерах. Конечно, это можно сделать с помощью других инструментов обработки текста, но если мы работаем с json, тогда давайте использовать для этого подходящие инструменты.
Используя модуль json python, мы можем иметь маленький скрипт, показанный ниже, где у вас есть список предметов, которые вы хотите сохранить. Предполагая, что ваш входной файл структурирован с помощью одного словаря json в строке, мы можем читать файл по строкам и загружать каждую строку в качестве словаря python. Оттуда это прямой путь к победе - перебирайте все ключи в словаре и посмотрите, находятся ли они в списке предметов, которые мы хотим сохранить; если они не находятся в этом списке - вытащите их.
#!/usr/bin/env python
import json,sys
keep = ['tech','original']
with open(sys.argv[1]) as f:
for line in f:
data=json.loads(line)
for key in data.keys():
if key not in keep:
data.pop(key)
json.dump(data,sys.stdout)
print ""
Тестирование:
$ cat input.json
{"url":"example.com","original":"ex.com","tech":"c"}
{"url":"example1.com","dsd":"sdsd","original":"ex1.com","tech":"d"}
$ ./remove_json_items.py input.json
{"tech": "c", "original": "ex.com"}
{"tech": "d", "original": "ex1.com"}
Другой вариант - поиск всех patern и повторение интересующей вас части. (...) вы можете использовать контент между () и after, в поле подстановки используйте \ и количество содержимого.
В этом примере я сделал два текста и первый \ 1 второй \ 2, чтобы вы заинтересовались \ 2, и ваш ответ:
sed 's/^{\(.*\),\(.*\),/{\2/' sedtest
Вы также можете включить тег «original»:
's/{.*,"original"/{"original"/' beta.txt
Выход:
{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}