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

1K поста15.5K подписчика

Добавить пост

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

1
Автор поста оценил этот комментарий

По-моему тут чего то не хватает

Иллюстрация к комментарию
1
Автор поста оценил этот комментарий
Объясните пожалуйста, почему $ cut -c 5 sample.txt дает "c", если пятый символ "q", а если считать с нуля, то "u".
раскрыть ветку