Заменить третье слово в двойных кавычках из файла

Вы не должны удалять /dev/ram0самостоятельно. Он будет удален, когда вы выполните sudo rmmod brd, что освободит место и удалит модуль. Затем вы можете начать снова с modprobe.

1
22.12.2019, 00:43
3 ответа

Использованиеjq:

$ jq '.topics[0].topic |= "test_1"' file.json
{
  "topics": [
    {
      "topic": "test_1"
    }
  ],
  "version": 1
}

Это читает документ JSON и изменяет значение записи topicпервого элемента массива topicsна строку test_1.

Если у вас есть значение в переменной (в кодировке UTF -8):

$ val='Some value with "double quotes"'
$ jq --arg string "$val"  '.topics[0].topic |= $string' file.json
{
  "topics": [
    {
      "topic": "Some value with \"double quotes\""
    }
  ],
  "version": 1
}

Использование Perl:

$ perl -MJSON -0777 -e '$h=decode_json(<>); $h->{topics}[0]{topic}="test_1"; print encode_json($h), "\n"' file.json
{"topics":[{"topic":"test_1"}],"version":1}

С переменной:

$ val='Some value with "double quotes"'
$ STRING=$val perl -MJSON -0777 -e '$string = $ENV{STRING}; utf8::decode $string; $h=decode_json(<>); $h->{topics}[0]{topic}=$string; print encode_json($h), "\n"' file.json
{"topics":[{"topic":"Some value with \"double quotes\""}],"version":1}

Оба они используют модуль Perl JSONдля декодирования документа JSON, изменения значения, которое необходимо изменить, а затем вывода повторно -закодированной структуры данных. Обработка ошибок оставлена ​​в качестве упражнения.

Для второго фрагмента кода вставляемое значение передается как переменная среды STRINGв код Perl. Это связано с чтением документа JSON из файла в режиме «slurp» с -0777.

8
27.01.2020, 23:10
sed -i 's/\(topic\": "\)[A-Za-z_]*/\1test_1/' file.json
2
27.01.2020, 23:10

Вместо сопоставления [A-Za-z_](, которое, кстати, соответствует гораздо большему количеству, чем английские буквы и символы подчеркивания в большинстве локалей ), используйте [^"]для любого символа, отличного от "(, кстати, образец в вашем вопросе имеет(U + 201D,RIGHT DOUBLE QUOTATION MARK)вместо цитаты json (", U + 0022,QUOTATION MARK)в качестве закрывающей цитаты после названия темы,Я предполагаю, что это не так в ваших исходных файлах, поскольку это сделало бы его недействительным json):

sed 's/\("topic": "\)[^"]*/\1test_1/' < file.json

(обратите внимание, что вы несете ответственность за то, чтобы замена имени темы была правильно закодирована JSON -:UTF -8 кодировок, управляющие символы закодированы (например \nдля новой строки )и "закодировано как\").

3
27.01.2020, 23:10

Теги

Похожие вопросы