Содержание
Оболочка 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
Здесь есть ещё одна потенциальная проблема, она связана с тем, что в именах файлов в Unix могут встречаться и специальные символы, в т. ч. символ новой строки (NL). Если используются утилиты GNU, то можно воспользоваться расширениями таким образом:
$ 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}'