Как вставить одинокую точку в строку с помощью команды ed "insert"?

Используйте catвместо команды, если хотите ее пропустить:

command=cat
if [[ $flag == true ]] ; then
    command=pipe_command_b
fi
command \
    | pipe_command_a \
    | $command       \
    | pipe_command_c
5
09.11.2019, 23:28
1 ответ

Нет, вы не можете вставить точку в строку саму по себе, потому что это инструкция edостановить вставку текста; см. одну из ранних ed man-страниц(стр. 7):

Input mode is left by typing a period (.) alone at the beginning of a line.

Вы можете обойти это, не вводя точку саму по себе; например:Пробел.Введите , а затем .Введите , а затем s/^ //. Вы можете использовать любой другой символ, кроме пробела, в качестве маркера, если вы соедините его в последующей команде s//.

Точка не может быть вставлена ​​сама по себе; при добавлении, изменении или вставке строки edвызывает функцию append_lines; эта функция в buffer.c считывает ввод, разделенный символом новой строки (черезget_stdin_line). В рамках этого он проверяет, является ли точка единственной вещью (помимо завершающей новой строки )в результате; ниже «ibufpp» — указатель на введенный текст, а «size» — длина этого буфера:

if( size == 2 && **ibufpp == '.' ) { *ibufpp += size; return true; }

Вы можете загрузить сжатые пакеты tar по адресу:http://download.savannah.gnu.org/releases/ed/или просмотреть страницу основной ветки Debian для ed или страницу OpenBSD для ed , где соответствующий код находится в main.c .

Другой вариант, обнаруженный в сообщении ed (1 )Conference в Твиттере , состоит в том, чтобы ввести любой другой одиночный символ, а затем заменить этот символ точкой :

. ]
  1. xВведите
  2. .Введите
  3. s/./.
7
27.01.2020, 20:38

Теги

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