В показанном вами простом примере это легко сделать. Просто экранируйте символы только в строках, которые не начинаются с{
:
$ sed -E '/^[^{]/s|(["\])|\\\1|g' file
\"a\" \"b\"
{"1":"female","2":"197312","3":"359","4":"201109","5":"mail"}
\\uff08\\u524d\\u5bfe\\u5fdc
Однако все становится значительно сложнее, если ваш JSON может занимать несколько строк. Для таких случаев вы можете написать небольшой скрипт, который подсчитывает количество открытий {
и закрытий }
и применяет замену только тогда, когда эти числа равны (, поэтому, когда мы не в строке JSON ). Что-то вроде:
perl -F'' -ne 'for (@F){$op++ if /{/; $cl++ if /}/; if($cl==$op){s|["\\]|\\$&|g;}print}' file
Однако это также не работает, если сама строка JSON может содержать {
или }
, которые не обозначают раздел JSON (, например. {"1":"b-{c}"}
или как там ). В таких случаях вместо этого используйте подход Стефана .
Проблема в том, что BR2 _TARGET _GENERIC _GETTY _PORT был установлен на «консоли» в buildroot 2018.05. Его нужно изменить на «ttyS0» в buildroot 2019.02.9.