- •II. First steps on the command line
- •5. Man pages
- •6. Working with directories (работа с папками)
- •7.Working with files
- •8. Working with file contents
- •9. The Linux file tree
- •III. Shell expansion
- •10. Commands and arguments
- •11. Control operators
- •12. Variables
- •13. Shell history
- •14. File globbing
- •IV. Pipes and commands
- •Глава 16. Фильтры.
- •16.3 Grep
- •16.7. Sort
- •16.8. Uniq
- •16.9. Comm
- •16.12. Примеры пайпов
- •Глава 17. Основные инструменты Unix
- •17.1. Find
- •17.2. Размещение
- •17.3. Date
- •17.5. Sleep
- •17.6. Time
- •17.7. Gzip - gunzip
- •17.8. Zcat - zmore
- •18.3. Замена и удаление символов (r X X)
- •18.4. Отменить и повторить (u .)
- •18.5. Вырезать, копировать и вставить строчки (dd yy p p)
- •18.6. Вырезать, копировать и вставить строчки (3dd 2yy)
- •18.8. Объединения двух и более линий (j)
- •18.9. Слова (w b)
- •18.10. Сохранить (или нет) и выход (:w :q :q! )
- •18.11. Поиск (/ ?)
- •18.13. Чтение файлов (:r :r !cmd)
- •19.1. Предпосылки
- •19.2. Hello World
- •19.4. Комментарии
- •20.2. Если, затем, иначе (if then else)
- •20.3. If then elif
- •20.4. For loop
- •20.5. While loop
- •21.2. Shift through parameters.
- •21.3. Runtime input.
- •21.3. Sourcing a config file.
- •21.5. Get script options with getopts.
- •21.6. Get shell options with shopt.
- •Глава 22 More scripting.
- •22.1. Eval.
- •22.4. Case.
- •22.5. Shell functions.
- •Раздел VII. Local user management. Глава 23. Users.
- •23.1. Identify yourself.
- •23.2. Users.
- •23.3. Passwords.
- •23.4 Home directories
- •23.5 User shell
- •23.6. Switcj users with su
- •23.7 Run a program as another user
- •23.10 Shell environment
- •Глава 24. Groups
- •24.1 About groups
- •24.2 Groupadd
- •24.3 /Etc/group
- •24.4 Usermod
- •24.5 Groupmod
- •24.6 Groupdel
- •24.7 Groups
- •24.8 Gpasswd
- •24.9 Vigr
Глава 16. Фильтры.
Команды, которые созданы для использования с пайпами, часто называют фильтрами. Фильтры - это небольшие программы, которые делают одну конкретную вещь достаточно эффективно. Они могут быть использованы в качестве строительных блоков. Эта глава познакомит вас с наиболее распространенными фильтрами. Сочетание простых команд и фильтров в длинном пайпе позволяет получить лучшее решение.
16.1 Cat
Когда команда catнаходится между двумя пайпами, она не делает ничего, кроме передачи потока стандартного ввода на стандартный вывод).
[paul@RHEL4b pipes]$ tac count.txt | cat | cat | cat | cat | cat
five
four
three
two
one
[paul@RHEL4b pipes]$
16.2 tee
Написания длинных пайпов в Unix это забавно, но иногда возникает необходимость в промежуточных результатов. Для этого нам пригодится фильтр tee. Фильтрteeставит поток стандартного ввода на стандартный вывод, а также в файл. Таким образом, командаteeпочти такая же, как иcat, за исключением того, что она имеет два одинаковых выхода.
[paul@RHEL4b pipes]$ tac count.txt | tee temp.txt | tac
one
two
three
four
five
[paul@RHEL4b pipes]$ cat temp.txt
five
four
three
two
one
[paul@RHEL4b pipes]$
16.3 Grep
Фильтр grepявляется довольно известным среди пользователейUnix. Наиболее распространенное использование фильтраgrep,является фильтрация строк текста, содержащего (или не содержащего) определенную строку.
[paul@RHEL4b pipes]$ cat tennis.txt
Amelie Mauresmo, Fra
Kim Clijsters, BEL
Justine Henin, Bel
Serena Williams, usa
Venus Williams, USA
[paul@RHEL4b pipes]$ cat tennis.txt | grep Williams
Serena Williams, usa
Venus Williams, USA
Вы можете написать этот фильтр без фильтра cat.
[paul@RHEL4b pipes]$ grep Williams tennis.txt
Serena Williams, usa
Venus Williams, USA
Одним из самых полезных вариантов фильтра является grep -i, который фильтрует, несмотря на регистр.
[paul@RHEL4b pipes]$ grep Bel tennis.txt
Justine Henin, Bel
[paul@RHEL4b pipes]$ grep -i Bel tennis.txt
Kim Clijsters, BEL
Justine Henin, Bel
[paul@RHEL4b pipes]$
Другая очень полезная опция grep -v, которая выводит строки, не удовлетворяющие введенной строке.
[paul@RHEL4b pipes]$ grep -v Fra tennis.txt
Kim Clijsters, BEL
Justine Henin, Bel
Serena Williams, usa
Venus Williams, USA
[paul@RHEL4b pipes]$
И, конечно, оба варианта могут быть объединены, чтобы отфильтровать все строки, не содержащие введенные строки и без учета регистра.
[paul@RHEL4b pipes]$ grep -vi usa tennis.txt
Amelie Mauresmo, Fra
Kim Clijsters, BEL
Justine Henin, Bel
[paul@RHEL4b pipes]$
С grep –A1на экран также выводится одна строка, которая идетпослестроки, в которой содержится исходный запрос.
paul@debian5:~/pipes$ grep -A1 Henin tennis.txt
Justine Henin, Bel
Serena Williams, usa
С grep –B1на экран выводится одна строка, которая идетдостроки, в которой содержится исходный запрос.
paul@debian5:~/pipes$ grep -B1 Henin tennis.txt
Kim Clijsters, BEL
Justine Henin, Bel
С grep –C1на экран выводится одна строка, которая идетдо и послестроки, в которой содержится исходный запрос. Все эти три опции (A,BиC) могут показывать любое количество строк (например,A2,B4 илиC20)
paul@debian5:~/pipes$ grep -C1 Henin tennis.txt
Kim Clijsters, BEL
Justine Henin, Bel
Serena Williams, usa
16.4 cut
Фильтр cut может выбирать столбцы из файлов, в зависимости от разделителя (т.е. например, если в файле слова написаны через :, и задать в качестве разделителя пробел, то «столбец» в каждой строке будет только один) или количества байт. На примере ниже, фильтрcutиспользуют, чтобы разделить имя пользователя иidпользователя в файле/etc/passwd. Используется двоеточие в качестве разделителя, и выбираются поля 1 и 3.
[[paul@RHEL4b pipes]$ cut -d: -f1,3 /etc/passwd | tail -4
Figo:510
Pfaff:511
Harry:516
Hermione:517
[paul@RHEL4b pipes]$
При использовании пробела в качестве разделителя для cut, вы должны взять его в “ “ кавычки.
[paul@RHEL4b pipes]$ cut -d" " -f1 tennis.txt
Amelie
Kim
Justine
Serena
Venus
[paul@RHEL4b pipes]$
В этом примере cutиспользуется для отображения со второго по седьмой символ/etc/passwd.
[paul@RHEL4b pipes]$ cut -c2-7 /etc/passwd | tail -4
igo:x:
faff:x
arry:x
ermion
[paul@RHEL4b pipes]$
16.5. tr
Вы можете заменять символы с помощью фильтра tr. На скриншоте видно замену всех “е” на “E”.
[paul@RHEL4b pipes]$ cat tennis.txt | tr 'e' 'E'
AmEliE MaurEsmo, Fra
Kim ClijstErs, BEL
JustinE HEnin, BEl
SErEna Williams, usa
VEnus Williams, USA
Здесь мы заменяем все строчные буквы на заглавные с помощью определения двух диапазонов.
[paul@RHEL4b pipes]$ cat tennis.txt | tr 'a-z' 'A-Z'
AMELIE MAURESMO, FRA
KIM CLIJSTERS, BEL
JUSTINE HENIN, BEL
SERENA WILLIAMS, USA
VENUS WILLIAMS, USA
[paul@RHEL4b pipes]$
Здесь мы заменяем все символы новой строки пробелами.
[paul@RHEL4b pipes]$ cat count.txt
one
two
three
four
five
[paul@RHEL4b pipes]$ cat count.txt | tr '\n' ' '
one two three four five [paul@RHEL4b pipes]$
Фильтр tr -sможно использовать, чтобы заменить несколько одинаковых символов на один.
[paul@RHEL4b pipes]$ cat spaces.txt
one two three
four five six
[paul@RHEL4b pipes]$ cat spaces.txt | tr -s ' '
one two three
four five six
[paul@RHEL4b pipes]$
Вы также можете использовать tr, чтобы "шифровать" тексты с помощьюrot13.
[paul@RHEL4b pipes]$ cat count.txt | tr 'a-z' 'nopqrstuvwxyzabcdefghijklm'
bar
gjb
guerr
sbhe
svir
[paul@RHEL4b pipes]$ cat count.txt | tr 'a-z' 'n-za-m'
bar
gjb
guerr
sbhe
svir
[paul@RHEL4b pipes]$
В этом последнем примере мы используем tr -dдля удаления символов.
paul@debian5:~/pipes$ cat tennis.txt | tr -d e
Amli Maursmo, Fra
Kim Clijstrs, BEL
Justin Hnin, Bl
Srna Williams, usa
Vnus Williams, USA
16.6. wc
Посчитать количество слов, строк и символов довольно легко с фильтром wc.
[paul@RHEL4b pipes]$ wc tennis.txt
5 15 100 tennis.txt
[paul@RHEL4b pipes]$ wc -l tennis.txt
5 tennis.txt
[paul@RHEL4b pipes]$ wc -w tennis.txt
15 tennis.txt
[paul@RHEL4b pipes]$ wc -c tennis.txt
100 tennis.txt
[paul@RHEL4b pipes]$