Замените отверстие `` `` `Double` `` `pairs с` `` bash

KVM построен на базе QEMU, а QEMU - это системная виртуальная машина, как вы ее называете.

Я не знаю ваш источник информации, но из https://en.wikipedia.org/wiki/Virtual_machine

Системная виртуальная машина предоставляет полную системную платформу, которая поддерживает выполнение полного рабочего система (ОС).

и http://qemu.weilnetz.de/qemu-doc.html#intro_005ffeatures

Полная эмуляция системы. В этом режиме QEMU эмулирует всю систему (например, ПК), включая один или несколько процессоров и различные периферийные устройства. Его можно использовать для запуска различных операционных систем без перезагрузки ПК или для отладки системного кода.

0
05.11.2018, 12:43
4 ответа

ОТРЕДАКТИРОВАНО

Команда sed 's/^(```)/(```bash)/g'не работает, так как круглые скобки интерпретируются буквально.
Вам, вероятно, придется избегать круглых скобок, как в

$ sed 's/^\(```\)/```bash/g'

Кроме того, вы можете включить расширенные регулярные выражения:

$ sed -E  's/^(```)/```bash/g'

, так что круглые скобки не нужно экранировать.

Или просто удалите круглые скобки:

$ echo '```' | sed 's/^```/```bash/g'
```bash

Чтобы соответствовать только открытию ```, вы можете использовать такое регулярное выражение:

$ sed --null-data -E 's/[`]{3,3}([^`]*)([`]{3,3}){0,1}/```bash\1\2/g'

Предупреждение:Ошибка, если`(обратная галочка )находится между последовательностями тройных обратных кавычек.

Он использует --null-data, чтобы позволить sedобрабатывать ввод как одну строку (на самом деле, строки, разделенные нулевыми символами ), а затем ищет последовательности текста ```--```, чтобы заменить их на ```bash -текст -```.

2
28.01.2020, 02:14

Вы можете попробовать использовать одинарные кавычки для команды sed:

sed 's/^(```)/(```bash)/g'

Это используется, чтобы избежать интерпретации символов из bash

Но на основе вашего файла вам лучше использовать что-то вроде:

sed 's/^```/```bash/g'
0
28.01.2020, 02:14

Я бы попробовал что-то вроде

 perl -ple 'if (m/^```$/) { if (--$|) { s/$/bash/ } }' data.md
1
28.01.2020, 02:14

Чтобы заменить каждую вторую строку ```на ```bash, наверное, проще с awk:

awk '$0 == "```" && alt = 1 - alt {$0 = "```bash"}; {print}' < file

Чтобы заменить каждую```строку, это будет:

sed 's/^```$/&bash/'

Нет необходимости явно фиксировать совпадение (, что, кстати, делается с помощью \(...\); (...)будет работать только после включения расширенных регулярных выражений, поддерживаемых некоторыми реализациями sedс -Eили -r), когда это полное совпадение, так как все совпадение в любом случае фиксируется как &.

Флаг gне нужен. Флаг gпредназначен для замены всех вхождений в строке , но здесь может быть только одно вхождение в строке, поскольку мы привязываем шаблон к началу и концу строки с помощью ^и $.

С sed, чтобы заменить каждую вторую строку, вы можете сделать:

sed '
  /^```$/ {
    s//&bash/;:1
    n;//!b1
  }'

В одну строку:

sed -e '/^```$/ {s//&bash/;:1' -e 'n;//!b1' -e '}'

С реализацией GNU sedвы можете сократить его до:

sed '/^```$/{s//&bash/;:1;n;//!b1}'

(но это не стандартный синтаксис sedкак POSIX, у вас не может быть никакого кода после команд :или bи должен быть ;или символ новой строки перед}).

4
28.01.2020, 02:14

Теги

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