Убрать из строки лишние символы
Возникла проблема, в json файле затесались символы типа: \t3, \t127, \t, \t214, \t226, \t232, \t238, \t244, \t250, \t258, \t2. Хотелось бы от них избавиться. Посмотрите пример (при помощи 'jq' отформатируем вывод).
cat f.fb2-507581-510525.json | grep 508874 | jq '.' { "tags": "Год спокойного солнца. Повесть \t3Синее небо. Повесть \t127РАССКАЗЫ\t«Ох, как жить тебе надо, курсант!»\t214Черная речка \t226Кум Кантемира.\t232Первые автографы\t238Как начиналась Антарктика\t244 Розыгрыш\t250Синьор Помидор и дальняя разведка\t258Уговорить шторм\t2", "_12_": "", "lang": "ru", "date": "2018-01-15", "format": "fb2", "_8_": 0, "author": [ [ "Неверов", "Игорь", "Михайлович" ] ], "genre": [ "prose_su_classics" ], "name": "Антарктика", "series_name": "", "series_id": "", "_5_": 508874, "_6_": 1500860, "_7_": 508874
Решение - при помощи sed вырежем сначала все что начинается с "\t" далее идут цифры "[0-9]*" и до начала текста "\B", потом просто найдем одиночные "\t" и заменим их пробелом.
sed -e 's/\\t[0-9]*\B//g' -e 's/\\t/ /g' f.fb2-507581-510525.json | grep 508874 | jq '.' { "tags": "Год спокойного солнца. Повесть Синее небо. Повесть РАССКАЗЫ «Ох, как жить тебе надо, курсант!» Черная речка Кум Кантемира. Первые автографы Как начиналась Антарктика Розыгрыш Синьор Помидор и дальняя разведка Уговорить шторм 2", "_12_": "", "lang": "ru", "date": "2018-01-15", "format": "fb2", "_8_": 0, "author": [ [ "Неверов", "Игорь", "Михайлович" ] ], "genre": [ "prose_su_classics" ], "name": "Антарктика", "series_name": "", "series_id": "", "_5_": 508874, "_6_": 1500860, "_7_": 508874
Итоговая команда, которая поравит наш файл, будет иметь вид:
sed -i -e 's/\\t[0-9]*\B//g' -e 's/\\t/ /g' f.fb2-507581-510525.json
Примечание. Двойной обратный слеш '\\' в нашем случае означает только экранирование символа, чтобы в итоге получить исходный образец для поиска '\t'. При помощи "grep 508874" мы выводим только необходимую нам строку из файла.