Text-Fu [Часть 2]
4. конвейер (pipeline) и разделитель (tee).
Давайте перейдем к водопроводу, ну, почти. Давайте попробуем команду:
$ ls -la /etc
Вы должны увидеть очень длинный список элементов, который довольно сложно прочитать. Вместо перенаправления вывода в файл, не было бы лучше вывести вывод в другую команду, например, less? Можем и так!
$ ls -la /etc | less
Оператор конвейера |, который представлен вертикальной чертой, позволяет нам получать stdout команды и создавать stdin для другого процесса. В этом случае мы получили stdout команды ls -la /etc, а затем направили (piped) в команду less. Команда конвейера чрезвычайно полезна, и мы будем использовать ее всегда.
Что, если бы я захотел вывести вывод моей команды в два различных потока? Это возможно с командой tee (разделитель):
$ ls | tee peanuts.txt
Вы должны увидеть вывод ls на вашем экране и, если вы откроете файл peanuts.txt, вы должны увидеть ту же информацию!
Упражнения:
Выполните эту команду:
$ ls | tee peanuts.txt banan.txt
5. env (Environment / среда)
Запустите следующую команду:
$ echo $HOME
Вы должны увидеть путь к вашей домашней директории, моя выглядит как /home/pete.
Что насчет этой команды?
$ echo $USER
Вы должны увидеть ваше имя пользователя!
Откуда эта информация берется? Она берется из переменных среды (environment variables). Вы можете увидеть их, написав
$ env
Эта команда выведет кучу информации о переменных среды, которые вы задали. Эти переменные содержат полезную информацию, которую оболочка и другие процессы могут использовать.
Вот короткий пример:
Одна, особенно важная, переменная - переменная PATH (путь). Вы можете обращаться к этой переменной, добавив $ перед именем переменной, как тут:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/bin
Это вернет список путей, разделенных двоеточием, которые ваша система ищет при запуске команды. Давайте скажем, что вы вручную скачали и установили пакет (package) из интернета, поместили его в нестандартную директорию и хотите запустит его командой, вы пишите $ coolcommand и консоль сообщает вам, что команда не найдена. Это довольно глупо искать исполняемый файл (binary) в каталоге, зная, что он существует. Вот, что происходит, когда переменная $PATH не проверяет этот каталог на наличие исполняемого файла, показывая ошибку.
Давайте скажем, что у вас тонна исполняемых файлов, которые вы хотите запустить из вашей директории, вы можете просто изменить переменную PATH, чтобы включить эту директорию туда.
Упражнения:
Какой будет вывод этой команды? Почему?
$ echo $HOME
6. cut (вырезать)
Мы собираемся изучить несколько полезных команд, которые вы можете использовать для обработки текста. Перед тем, как мы начнем, давайте создадим файл, с которым мы будем работать. Скопируйте и вставьте следующую команду, также добавьте TAB между lazy и dog (нажмите Ctrl+V+TAB).
Первая команда, о которой мы узнаем - cut. Она извлекает порции текста из файла.
Чтобы извлечь содержимое списка символов:
$ cut -c 5 sample.txt
Это выведет 5й символ каждой строки файла. В этом случае, это "q", обратите внимание, что пробелы также считаются за символ.
Чтобы извлечь содержимое по полям, нам нужно сделать маленькое изменение:
$ cut -f 2 sample.txt
Флаг -f (field) вырезает текст, основываясь на полях, по-умолчанию, он использует TABы, как ограничители, то есть все, что разделено TAB считается полем. Вы должны увидеть dog, как вывод.
Вы можете комбинировать флаг поля с флагом ограничителя, для извлечения содержимого с пользовательским ограничителем:
$ cut -f 1 -d ";" sample.txt
Это изменит ограничитель TAB на ";" и, так как мы обрезаем первое, поле, результат должен быть "The quick brown".
GNU/Linux
1.1K постов15.5K подписчиков
Правила сообщества
Все дистрибутивы хороши.
Будьте людьми.