Убрать из строки лишние символы

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

 

 

Автор: Александр