Мой ноутбук - Lenovo G50-70. Я установил ubuntu и он хорошо загружался с GRUB, но окна имели ошибку BCD. После исправления ошибки BCD он сразу загружается в окна 10, не показывая GRUB, и я не могу загрузиться в ubuntu. Как вернуть GRUB?
-121--893077-Я пытаюсь обновить файл на сервере, на котором новая строка должна иметь одну вкладку в передней части, но новую, чтобы сделать скрипт и sed и продолжать получать нежелательный символ в передней части.
Это команда sed:
sed -i "/acl \"trusted\" {/a&\t$ACL_IP; # $SRV_HOST_NAME" $ACL_CONF_FILE
In the results I get :
& 192.12.12.12; # SERVER
192.13.13.13; # SERVER1
192.14.14.14; # SERVER2
Instead of :
192.12.12.12; # SERVER
192.13.13.13; # SERVER1
192.14.14.14; # SERVER2
Я также попробовал следующее, но получить неизвестную ошибку команды:
sed -i "/acl \"trusted\" {/$ACL_IP # $SRV_HOST_NAME;\r\n\tacl \"trusted\" {/" $ACL_CONF_FILE
Я также попытался:
sed -i "/acl \"trusted\" {/a/\t$ACL_IP; # $SRV_HOST_NAME" $ACL_CONF_FILE
Но получите:
/ 192.12.12.12; # SERVER
надеюсь, что я близок, но просто не вижу, чтобы избавиться от дополнительного персонажа.
Итак, вы пытаетесь использовать команду (GNU extension) a text
для a ppend text
после совпадения. Однако ваш текст
в этом случае начинается с символа табуляции, представленного в sed
escape-последовательностью \ t
.
К сожалению, существует также (совместимая с POSIX) форма команды a ppend, в которой символ обратной косой черты отделяет команду a
от текста
. Поэтому, когда вы пишете a \ t
, он добавляет литерал t
. Вы «исправили» это, поместив дополнительный символ (сначала &
, затем позже /
), чтобы отделить обратную косую черту от команды a
, но это только вызвало те добавляются буквально.
Чтобы устранить двусмысленность, вам нужно передать команду как a \\ t
. К сожалению, поскольку вы используете двойные кавычки вокруг всего выражения sed (чтобы разрешить раскрытие переменных оболочки), оболочка расширит \\
на \
; чтобы передать \\
, вам нужно избежать обеих обратных косых черт:
sed "/acl \"trusted\" {/a\\\\t$ACL_IP; # $SRV_HOST_NAME"
В качестве альтернативы, заключите в одинарные кавычки части, которые не нуждаются в расширении оболочки:
sed '/acl "trusted" {/a\\t'"$ACL_IP; # $SRV_HOST_NAME"
Другой вариант - заменить escape-последовательность \ t
буквальной табуляцией, составленной с помощью Ctrl + V , затем TAB . Вы по-прежнему должны использовать форму команды a \
, поскольку расширение GNU форма текста
игнорирует начальные пробелы.
В качестве альтернативы (и, возможно, более аккуратно) вы можете использовать команду r
для чтения строки в формате printf
из стандартного ввода:
printf '\t%s; # %s\n' "$ACL_IP" "$SRV_HOST_NAME" |
sed -i '/acl "trusted" {/r/dev/stdin' "$ACL_CONF_FILE"