Я пытаюсь удалить определенный текст из файла. Я попытался использовать 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/[^,]*,/{/' beta.txt
{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}
Начиная с Вашего редактирования, хотя, по-видимому, нет ничего последовательного для соответствия на всех строках кроме original
явно, таким образом, мы должны будем сделать это... не много забавы.
sed 's/.*,"original/{"original/'
Другой:
# sed 's/\".*com,//' sedtest
{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}
Редактирование: флаг Use -i
, если Вы хотите внести изменения в некоторый файл. Как:
sed -i.bak 'regex_above' filename
Помещение точки на -i
параметр создает резервное копирование, названное filename.bak в том же dir также.
Другая опция является поиском весь шаблон, и повторите часть, которой Вы интересуетесь. с (....) Вами может использовать содержание между () и после, в полевом использовании замены \и количество содержания.
В этом примере я сделал два текста и первые \1 вторыми \2, таким образом, Вы интересуетесь \2, и Ваш ответ:
sed 's/^{\(.*\),\(.*\),/{\2/' sedtest
Можно также включать "исходный" тег:
's/{.*,"original"/{"original"/' beta.txt
Вывод:
{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}
Надлежащий вопрос спросить вот был бы, "Как сохранить только определенные объекты в json
словарь", потому что это точно, что замечено в Ваших примерах. Конечно, возможно сделать это через другие инструменты обработки текста, но если мы работаем с json
, затем позволяет использованию надлежащие инструменты для этого.
Используя Python json
модуль, нам можно было показать маленький сценарий ниже, где у Вас есть список объектов, Вы хотите сохранить. Принятие Вашего входного файла структурировано с одним 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"}