Перезапись строки в оболочке Unix после печати

Если Вы используете администратора сети, я предлагаю переключиться на wicd вместо этого. По моему опыту, администратор сети, кажется, разработан главным образом для графических рабочих столов. На wicd намного легче управлять сетями Wi-Fi без графических инструментов.

4
28.08.2013, 17:32
2 ответа

Как обсуждено в комментариях, проблема состоит в том, где Вы оставили курсор. Например:

goldilocks@home> echo -n 1234; echo -ne "\r56"
56goldilocks@home>

То, что произошло, является первым echo записал "1234", затем второе эхо вернулось к началу строки и распечатало "56" и вышло. Курсор остался после этих 6, и следующей вещью, которая произошла, является оболочка, распечатал командную строку, перезаписав "34". Если Вы включали новую строку во второе эхо (или удалил -n переключатель, так, чтобы эхо распечатало новую строку автоматически), Вы добрались бы:

goldilocks@home> echo -n 1234; echo -e "\r56"
5634
goldilocks@home>

Курсор спустил строку, уехав "34" позади.

7
27.01.2020, 20:48
  • 1
    Является Вашим именем пользователя даже лютик золотистый? Слишком забавный. –  slm♦ 28.08.2013, 19:14
  • 2
    @slm: На самом деле это Freakin_Finnickity_Goldilocks_the_Magnificent но я редактирую эти вещи для краткости ;) –  goldilocks 29.08.2013, 12:54

Можно сделать это использование немного усовершенствованного sed выражения

printf '%s\n' {1..5} | sed '/1/,/2/{ s/1/6/;s/2/7/;s/\([^\n]*\)\(\n\)\(.*\)/\3\2\1/; }' | tr '\n' ' '

Используя awk

printf '%s' {1..5} | awk '{gsub(/12/,"67"); print}'

Используя tr

printf '%s' {1..5} | tr '12' '67'
3
27.01.2020, 20:48
  • 1
    В вопросе я попросил перезапись строки, которая уже печатается на оболочке.But, Ваш ответ о передающем выводе одного другому и затем печатающий на оболочке, это не, я искал. Так или иначе, спасибо за ответ. –  g4ur4v 28.08.2013, 18:33
  • 2
    @g4ur4v в обоих первых примерах я переопределяю printf встроенный. В Вашем примере Вы используете возврат каретки \r который переопределяет printfs вывод. Возьмите этот пример echo "12345"; printf '\r67\n' –  Valentin Bajrami 28.08.2013, 18:41
  • 3
    То, что я хотел подчеркнуть на Ваших примерах, является использованием | вместо ; .As на мое понимание ; между двумя командами похож на выполнение двух команд рядом со следующим и обоими команды, являющиеся независимым друг от друга. Но в Вашем примере, Вы перенаправляете вывод одного другому. –  g4ur4v 28.08.2013, 19:03

Теги

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