Есть ли у sed функции, превосходящие awk? [закрыто]

Да.

Вот только некоторые из них.

вход суперпользователя

В таких системах, как FreeBSD и OpenBSD, программа init разрешает вход в систему только как пользователь #0, в однопользовательском режиме, на терминалах, помеченных как безопасные в файле /etc/ttys. А программа login (непосредственно в OpenBSD, через модуль PAM во FreeBSD) принудительно устанавливает флаг secure в многопользовательском режиме.

Debian и Ubuntu аналогично имеют механизм /etc/securetty. Во всех этих системах консоль и виртуальные терминалы ядра (которые не обязательно являются консолью, заметьте) по умолчанию разрешают вход суперпользователю.

В OpenBSD для SSH по умолчанию из коробки не разрешается вход в систему от имени суперпользователя при использовании парольной или клавиатурно-интерактивной аутентификации (но разрешается при использовании аутентификации с открытым ключом). В FreeBSD для SSH по умолчанию из коробки вообще не разрешен вход от имени суперпользователя.

события вывода фреймбуфера/программы ввода с USB

Можно туннелировать X через SSH-соединение, и можно взаимодействовать с программами, использующими терминальное устройство. Но программы, которые ожидают выполнения ввода/вывода через систему устройств "event" Linux, через устройства USB HID и через устройство фреймбуфера, не могут работать через SSH.

дальнейшее чтение

звук

Обычно звук не передается по SSH. Можно вручную направить программы, издающие звук, на сервер PulseAudio по локальной сети, или вручную проложить туннель от удаленных звуковых клиентов к локальному серверу PulseAudio. Но не всякий звук является PulseAudio, для начала.

дальнейшее чтение

Брайль

Такие программы, как BRLTTY, требуют прямого доступа к массиву ячеек "символ+атрибут" виртуального терминального устройства. Если на сервере установлен BRLTTY, он не может получить доступ к сеансам входа в SSH и отобразить их шрифтом Брайля, в то время как он может отображать сеансы входа в виртуальный терминал ядра.

дальнейшее чтение

аварийный режим и режим спасения работают

Загрузка в аварийный режим или режим спасения не запускает SSH-сервер. Ни в том, ни в другом режиме не запускается все то, что лежит в основе работы в сети, не говоря уже о сетевых службах, таких как SSH-сервер.

непредсказуемые вещи PolicyKit

В PolicyKit есть понятие активных и неактивных сеансов входа. Это попытка свести то, что в системе /etc/ttys является набором нескольких атрибутов (on, secure, network, dialup) к единственному переключателю true/false между "active" и "inactive". Это не совсем соответствует миру, в котором существует SSH и ему подобные.

Активная" сессия входа в систему возможна только при входе на консоль или в виртуальный терминал ядра. Вход в систему через SSH всегда считается "неактивным" сеансом входа. В результате могут возникнуть удивительные различия в поведении, поскольку авторы программ и системный администратор могут предоставлять разные разрешения на выполнение различных действий активным и неактивным сеансам входа.

дальнейшее чтение

5
23.06.2017, 11:58
2 ответа

Большую часть времени sed используется для базового редактирования (s///g).
Большую часть времени awk используется для более сложного редактирования текста.

Основная причина использования sed вместо awk в тех случаях, когда sed и awk дают полезные (простые) ответы, заключается в том, что sed равен ~100k, а GNU awk — ~600k.

Небольшие загрузки выполняются быстрее (иногда это важно).

Старые awk, как правило, меньше, mawk составляет ~121 КБ (мы должны найти старый sed, чтобы сделать разумное сравнение).

И есть Perl, очень мощный язык, очень быстрый в некоторых случаях, но достаточно большой, чтобы загрузить ~2 мегабайта. Многократное использование Perl может привести к длительным задержкам.

Часто задаваемые вопросы по sed, глава 6 дает хорошо написанные и вполне сбалансированные рекомендации о том, когда использовать или избегать использования sed по сравнению с awk и perl.

2
27.01.2020, 20:40

Для быстрого и простого редактирования файла на местеsed-функция i намного проще, чем создание чего-то подобного с использованием awk. Я согласен с тем, что платформы, использующие gawkв версии 1.4.0 или более поздней, имеют функцию «на месте», чтобы покрыть это.

sed -i 's/foo/bar/' filename

С неохотой выучил sedсам из-за того, что все существующие скрипты его используют. При наличии выбора при написании нового скрипта обычно побеждает awk, код становится намного более читабельным и удобным в сопровождении.

2
27.01.2020, 20:40

Теги

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