Убрать из строки лишние символы
Возникла проблема, в 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" мы выводим только необходимую нам строку из файла.