Вы можете использовать perl для замены всех элементов управления C0 на шестнадцатеричные escape-последовательности:
perl -pe 's/([\x01-\x1f])/sprintf("\\u%04x", ord($1))/eg' < test.json
Это
perl -pe
)s/([\x01-\x1f])/
...g
)ord($1)
)sprintf("\\u%04x", ord($1))
(/e
)Это вставит \u0001
, \u0002
,..., \u001f
вместо совпадающих байтов.
Это будет экранировать все символы новой строки таким же образом, поэтому, если в файле есть разрывы строк без кавычек, он будет (разрываться, в частности, текстовый файл будет иметь по крайней мере завершающий символ новой строки, но это может удаляться механически либо до, либо после ). В этом случае [\x01-\x09\x0b-\x1f]
пропустит его, но не удастся, если есть истинные разрывы строк внутри кавычек.
Если в вашем файле есть разрывы строк как в кавычках, так и без кавычек, такая бесконтекстная замена не работает. Вам понадобится либеральный синтаксический анализатор JSON, который принимает файл как -, чтобы знать, какие из них нужно экранировать, а какие нет. Я не уверен в -раздаче.
Наконец-то я сам разобрался.
Загрузка моей системы в режиме восстановления и удаление файла /home/<myUser>/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
вернули пользовательский интерфейс Firefox в состояние по умолчанию после обычной перезагрузки.
РЕДАКТИРОВАТЬ :Оказывается, проблема была в шрифте, который я установил, его изменение решает проблему без удаления каких-либо файлов.