Это старая версия (1.10) ОболочкаShell.

Содержание

Оболочка shell

На этой странице будут собраны и разбиты на разделы практические приёмы использования оболочки (shell). Так как сама по себе оболочка является всего лишь тонким «клеем» для объединения программ и файлов в новые инструменты (через конвеер и перенаправление ввода-вывода), в этот раздел будут помещены ссылки на другие вики-страницы, где описаны приёмы работы с прочими классическими утилитами Unix.

Конвеер для работы с файлами

 $ find /etc -maxdepth 1 -type f | sort | ( echo cat ; cat ) | paste -s -d ' ' | sh >/tmp/all

Я бы отдал предпочтение tr вместо paste, вот так:

 $ find /etc -maxdepth 1 -type f | sort | { echo cat; cat } | tr '\n' ' ' | sh >/tmp/all

Здесь запуск подоболочки (subshell) заменён на блок (в фигурных скобках), так как преследовалась цель объединить последовательно вывод утилит echo и cat на стандартный вывод. Для этой цели подоболочку запускать расточительно.

Здесь есть ещё одна потенциальная проблема, она связана с тем, что в именаx файлов могут встречаться любые символы, кроме нулевого байта (NUL) и слеша (/). В имени файла может присутствовать символ новой строки (NL), в то же время find печатает список файлов, отделяя этим символом имена друг от друга. Если в имени файла содержится символ новой строки, тогда вывод find не отличим от двух файлов, следующих подряд.

Если используются утилиты GNU, то следует воспользоваться расширением, которое заменяет символ разделителя в списке файлов, выводимом find:

 $ find /etc -maxdepth 1 -type f -print0 | sort -z | xargs -0 cat >/tmp/all

Здесь find выводит имена файлов разделяя их не символом новой строки, а нулевым байтом (NUL). В этом случае все утилиты конвеера должны понимать это соглашение, например, GNU sort и GNU xargs умеют обрабатывать списки файлов с таким разделителем. -- СиткаревГригорий


Фильтр sed

 $ echo "abcabc" | sed 's/\(.*\)\(\1\)/\1/'
 
 $ sed -n 'H;${x;s/\n/ /g;p}'
 $ sed -n '1h;1!H;${x;s/\n/ /g;p}'

Прокомментируйте, пожалуйста, что делают вышеперечисленные примеры вызова sed. -- СиткаревГригорий