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
Автор поста оценил этот комментарий
Нее, конкретно у вас в переводе написано "В этом случае, это "c"". Или вы имели ввиду, что это флаг "-c", а не то, что выведется в результате.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Ой, да, моя ошибка, должно быть q. Спасибо

@Snipers, исправь "В этом случае, это "c"" на "В этом случае, это "q""

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

Прошу прощения, но можно ли с вами, как-то связаться помимо пикабу? Вопрос жизни и смерти.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Можно, а зачем?
показать ответы
Автор поста оценил этот комментарий
Модератор говорит, что версия поста до редактуры совпадает с версией после за исключением моих двух правок.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Хм, странно, но ладно
показать ответы
Автор поста оценил этот комментарий

Нет, никто не удалял ничего, только 2 слова поменяли, где оно было?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
В самом начале.
показать ответы
Автор поста оценил этот комментарий
+
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Заметил, что исчезло содержание, удалили, что ли?
показать ответы
2
Автор поста оценил этот комментарий

Ой, да, моя ошибка, должно быть q. Спасибо

@Snipers, исправь "В этом случае, это "c"" на "В этом случае, это "q""

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

@Snipers, а еще "линию" файла поменяй на строку)

показать ответы
1
Автор поста оценил этот комментарий
Объясните пожалуйста, почему $ cut -c 5 sample.txt дает "c", если пятый символ "q", а если считать с нуля, то "u".
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Можете файл показать?
показать ответы
Автор поста оценил этот комментарий
Могу добавить, если хочешь, дай текст и скажи куда =)
раскрыть ветку (1)
Автор поста оценил этот комментарий
Попозже ток