Источник:
|
http://habrahabr.ru/post/105926/ - вдохновитель :) |
Перенаправление вывода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
Как и > в командной строке, вы можете использовать < для перенаправления файла, но уже на вход команде. Для многих команд, можно просто указать имя файла. К сожалению некоторые программы работают только со стандартным потоком ввода. Bash и другие шелы поддерживают концепцию «herefile». Это позволяет давать входные данные команде в виде набора строк с последующей командой, означающей окончание ввода последовательности значений. Проще всего это показать на примере: $ sort <<END apple cranberry banana END apple banana cranberry В приведенном выше примере, мы вводим слова apple, cranberry и banana, с последующим «END» для указания окончания ввода. Затем программа sort возвращается наши слова в алфавитном порядке. Использование ">>" Можно ожидать, >> будет в чем-то похожа на <<, но это не так. Она позволяет просто добавить вывод в файл, а не перезаписывать его каждый раз, как это делает >. Пример: $ echo Hi > myfile $ echo there. > myfile $ cat myfile there. Уупс! Мы потеряли часть с «Hi»! А вот что мы имели ввиду: $ echo Hi > myfile $ echo there. >> myfile $ cat myfile Hi there. $ echo "firstfile" > copyme.txt |
Пайпы:
|
Используя пайпы, мы можем передать вывод одной команды на вход другой. Символ | используется для подключения выхода команды слева, ко входу команды справа от него. $ echo "hi there" | wc В примере выше, команда echo печатает в вывод «hi there» с символом перевода строки в конце. Этот вывод обычно появляется в терминале, но канал перенаправляет его на вход команде wc, которая показывает количество строк, слов и символов. $ ls -s | sort -n В этом случае, ls -s обычно вывела бы текущую директорию на терминал, с указанием размера перед каждым файлом. Однако вместо этого, мы передаем вывод программе sort -n, которая численно отсортирует его. Это очень удобно для поиска файлов, которые занимают в директории больше всего места. |
Распаковывающий канал:
|
Для разархивации и распаковки файла, вы могли бы сделать следующее: $ bzip2 -d linux-2.4.16.tar.bz2 $ tar xvf linux-2.4.16.tar Недостаток такого метода — это создание промежуточного, разархивированного файла на диске. Поскольку tar может читать данные напрямую со своего входа (вместо указанного файла), мы можем получить тот же конечный результат используя пайп: $ bzip2 -dc linux-2.4.16.tar.bz2 | tar xvf - Сжатый тарбол был распакован и мы обошлись без промежуточного файла. Вот еще один пример пайпа: $ cat myfile.txt | sort | uniq | wc -l Мы используем cat для отправки содержимого myfile.txt команде sort. Когда sort получает данные на вход, она сортирует их построчно в алфавитном порядке, и отправляет в таком виде программе uniq. uniq удаляет повторяющиеся строки (кстати uniq, требует отсортированный список на входе) и отправляет результат на wc -l. Мы рассматривали команду wc ранее, но без ее опций. Когда указывается опция -l, то команда выводит только количество строк, количество слов и символов в этом случае не выводятся. Вы увидите, что такой пайп распечатает количество уникальных строк в текстовом файле. |
echo
|
echo - печатает свои аргументы на терминал Используйте опцию -e если хотите включить в вывод управляющие последовательности; например echo -e 'foo\nfoo' напечатает foo, затем перейдет на новую строку, затем снова напечатает foo. Используйте опцию -n чтобы запретить echo добавлять символ новой строки в конец вывода, как это сделано по-умолчанию. echo -e 'foo\nfoo' echo -n 'foo' echo -e " Имя хоста `hostname` \n Текущие время `date` " |
cat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
cat - напечатает содержимое указанного файла на терминал. cat foo.txt | blah cat foo.txt cat /etc/passwd cat file.txt | wc -l - посчитать число переводов строк cat file.txt | wc -w - посчитать число слов cat new.txt | sed '/ *#/d; /^ *$/d' > newfile - удаление комментариев и пустых строк cat filename.txt | sed '/^ $/d' > newfile - удаление пустых строк cat ~/.ssh/known_hosts | sed "[nomer_stroki_1],[nomer_stroki_2]d" > ~/.ssh/known_hosts - удаление строк(и) из файла с заранее известным номером Фишки перенаправления с помощью cat 0. Перенаправить текст в файл как есть (без преобразования переменных и т.д. Эфект достигается если стоп слово (в примере EOF) взято в кавыки ("EOF") cat << "EOF" > script.sh #!/bin/bash echo "${ggg}" EOF cat > script.sh << "EOF" #!/bin/bash echo "${ggg}" EOF 1. Перенаправить текст в файл с преобразованием переменных Нету кавычек в EOF, переменные будут переданы. cat << EOF > script.sh #!/bin/bash echo "${ggg}" EOF 2. пример проверки: Пишем в консоль ggg=500 Потом выполняем: cat << EOF > script.sh #!/bin/bash echo "${ggg}" EOF Проверяем что получилось, проверяем другие варианты работы cat cat script.sh |
tac
|
tac - похожа на cat, но печатает все строки в обратном порядке, другими словами, последняя строка печатается в первую очередь. |
sort
|
sort - выведет содержимое файла, указанного в командной строке, в алфавитном порядке Естественно, sort также может принимать ввод из пайпа. Наберите man sort чтобы ознакомиться с опциями команды, которые управляют вариантами сортировки. du -ks * | sort -n -r - Сортировать по размеру (kbytes) du -s /usr/share/* | sort -n - показать размер всех каталогов внутри каталога /usr/share/ и отсортировать по размеру (размер в Кб) ps uax | grep -v "\ 0\.0\ " | cut -c 1-120 | sort -nrk 3 | grep -v "USER"- программа ps покажет все процессы, grep уберёт лишние процессы программа, cut обрежет вывод (уберет лишний текст), sort произведет сортировку, grep уберёт строку со словом USER ps uax | sort -nrk 3 - сортировать по числу(-n) из третьей колонки(-k 3), в порядке убывания (от большего к меньшему) (-r) ps uax | tr -s " " | cut -f 1,2,3,11 | sort -nrk 3 | cut -c 1-100 - программа ps покажет все процессы, tr заменит все символы разделители на пробел (tr -s " "), с помощью cut мы выберем столбцы, отсортируем вывод по третьей колонке, в конце cut обрежет сроки до 100 символов ps uax | sort -nrk 3 | tr -s " " | cut -f 1,3,11 -d " " | head - программа ps покажет все процессы, sort отсортирует по третьему столбцу, tr заменит все символы разделители на пробел (tr -s " "), cut покажет три столбца (1,3,11), head выведет первые десять строк ps uax | sort -nrk 3 | tr -s " " | cut -f 1,3,14 -d " " | head -n3 - программа ps покажет все процессы, sort отсортирует по третьему столбцу, tr заменит все символы разделители на пробел (tr -s " "), cut покажет три столбца (1,3,14), head выведет первые три строки |
uniq
|
uniq - принимает уже отсортированный файл или поток данных (через пайп) и удаляет повторяющиеся строки. |
wc
|
wc - выводит количество строк, слов и символов в указанном файле или во входном потоке (из пайпа). Введите man wc чтобы узнать, как настроить вывод программы. wc -l filename - посчитать количество строк в файле cat file.txt | wc -l - посчитать число строк cat file.txt | wc -w - посчитать число слов |
head
|
head - выводит первые десять строк файла или потока. Используйте опцию -n, чтобы указать, сколько строк должно отображаться. head -n 23 - прочитать файл от начала 23 строчки |
tail
|
tail - печатает последние десять строк файла или потока. Используйте опцию -n, чтобы указать, сколько строк должно отображаться. tail -n 23 - прочитать файл с конца 23 строчки tail -n0 -f /var/log/syslog - наблюдать за файлом |
expand
|
expand - конвертирует входные символы табуляции в пробелы. Опция -t указывает размер табуляции. expand name.txt - вывести заменив TAB на пробелы |
unexpand
|
unexpand - конвертирует входные пробелы в символы табуляции. Опция -t указывает размер табуляции. |
cut
|
cut - используется для извлечения из входного файла или потока, полей разделенных указанным символом. (попробуйте echo 'abc def ghi jkl' | cut -d ' ' -f2,2 прим. пер.) cut - показать содержимое вырезав символы cut -c 1,4,7 name.txt - показать содержимое вырезав символы cat /etc/passwd | cut -f 1,3,6 -d ':' - показать содержимое 1,3,6 столбика вырезав 2,4,5 разделенные символом ':' |
nl
|
nl - добавляет к каждой входной строке ее номер. Удобно для распечатки. nl 1.txt - вывести и нумеровать строки |
pr
|
pr - разбивает файл на страницы и нумерует их; обычно используется для печати. pr 1.txt - покажет как будет выглядеть документ при печате на принтере |
tr
|
tr - трансформация текста в файле tr - инструмент трансляции (преобразования) символов; используется для отображения определенных символов во входном потоке на заданные символы в выходной поток. |
sed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
sed - мощный потоко-ориентированный текстовый редактор. Обычно используется с cat sed '/ *#/d; /^ *$/d' - удаление комментариев и пустых строк sed '/^ $/d' - удаление пустых строк sed 's/^[ \t]*//' - удалить все пробелы и символы табуляции в начале каждой строки файла (смотрите примечание по табуляции в конце документа) sed 's/foo/bar/' (замена только первого совпадения в строке) - поиск и замена "foo" на "bar" в каждой строке sed 's/foo/bar/4' (замена первых 4рех совпадений в строке) - поиск и замена "foo" на "bar" в каждой строке sed 's/foo/bar/g' (замена ВСЕХ совпадений в строке) - поиск и замена "foo" на "bar" в каждой строке sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' (замена предпоследнего совпадения) - поиск и замена "foo" на "bar" в каждой строке sed 's/\(.*\)foo/\1bar/' (замена только последнего совпадения) - поиск и замена "foo" на "bar" в каждой строке cat new.txt | sed '/ *#/d; /^ *$/d' > newfile - удаление комментариев и пустых строк cat filename.txt | sed '/^ $/d' > newfile - удаление пустых строк cat ~/.ssh/known_hosts | sed "[nomer_stroki_1],[nomer_stroki_2]d" > ~/.ssh/known_hosts - удаление строк(и) из файла с заранее известным номером cat file.name.txt | sed 's/ *$//' > file.txt - удалить все пробелы в конце каждой строки. sed -r '/(^#.*$)|(^[0-9a-zA-Z\.\:\/\-]+(\.ru\/?)[a-zA-Z0-9\/\-\?\,\]*$)/!{s/^/#/}' text.txt > newtext.txt - все что не соответствует шаблону будет закомментировано sed -i '1 i 000' file - добавить нужную строку в файл cat rasilka.csv | sed 's/ //g' | sed 's/-//g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' > rasilka.csv.edit |
awk
|
awk - искуссный язык построчного разбора и обработки входного потока по заданным шаблонам. |
od
|
od - разработан для представления входного потока в восьмеричном, шестнадцатеричном и т.д. формате. |
split
|
split - эта команда используется для разделения больших файлов на несколько небольших, более управляемых частей. split -b 1M filemy - разбить filemy на части размером 1 Мб с помощью опции -b split -n 3 filemy - разрезание filemy на три части |
fmt
|
fmt - используется, чтобы выполнить «перенос» длинных строк текста. Сегодня она не очень полезна, поскольку эта возможность встроена в большинство текстовых редакторов, хотя команда достаточно хороша, чтобы ее знать. |
paste
|
paste - принимает два или несколько файлов в качестве входных данных, объединяет построчно и выводит результат. Может быть удобно для создания таблиц или колонок текста. paste 1.txt 2.txt - объединить два файла построчно |
join
|
join - похожа на paste, эта утилита позволяет объединять два файла по общему полю (по-умолчанию первое поле в каждой строке). |
tee
|
tee - печатает входные аргументы в файл и на экран одновременно. Это полезно, когда вы хотите создать лог для чего-либо, а также хотите видеть процесс на экране. |
Как вставить текст в нужное место файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
Нашей задачей будет вставка всего содержимого текстового файла в нужную строку и графу другого текстового файла. Если нужно просто вставить текст после определенной строки, то с этим справится несколько команд Linux. Например, чтобы вставить содержимое файла file1.txt после второй строки файла file2.txt, подойдет любая из команд: $ sed -i '2r file1.txt' file2.txt $ awk '{print} NR==2 {while (getline < "file1.txt") print}' file2.txt В отличие от команды sed, которая внесет изменения в файл file2.txt, команда awk выдаст результат на стандартный вывод (Stdout); при желании его можно переадресовать в новый файл. Это удобнее, когда не нужно изменять исходный файл. $ emacs -batch +3 file2.txt --insert file1.txt -f save-buffer -kill В этом заклинании используется функция batch (группирование, пакетирование) редактора emacs. Команда открывает file2.txt на строке 3, вставляет file1.txt, сохраняет и потом закрывается. Изменения, таким образом, вносятся непосредственно в file2.txt. $ vi +2 file2.txt << DELIM > :r file1.txt > :wq > DELIM Vim: Warning: Input is not from a terminal Необходимо пояснить, что в командную строку вы вводите только первую строку: $ vi +2 file2.txt << DELIM и нажимаете ENTER. Все последующие строки вы вводите уже в строку приглашения редактора vi, которая начинается со знака >. В распоряжении Linux много утилит для работы с текстом (sed, perl, awk, cut, python), но для выполнения второй части задания — поместить вставку не только в нужную строку, но и в нужную колонку текста, я не придумал ничего удобнее emacs: $ emacs -batch -Q +2:3 file2.txt --insert file1.txt -f save-buffer -kill 2>/dev/null Секрет в цифрах +2:3, которые приказывают редактору открыть вторую строку и 3 столбец. Еще несколько объяснений по поводу данной команды. Опция -Q означает быстрое открытие файла. Быстрое потому, что, по умолчанию, emacs не откроет ни init, ни splash файлы. И еще: выражение в конце команды 2>/dev/null переадресует все сообщения редактора в файл /dev/null, то есть не выводит их на экран монитора. Команды sed, awk или perl могут справиться с поставленной задачей |
split или как мы вставляли нужную надпись между строк (не было ни sed nano т.д.):
|
1. cp my.txt my.txt.back допустим нам над вставить фразу между строк 599 и 600 cat my.txt |wc -l так мы узнаем сколько там всего строк (если нужно) 2. split -l 599 my.txt (файл разделиться) 3. echo "нужная фраза" >> ma.txt ( где ахх это первая половина с 599 строками) 4. cat ma.txt mb.txt >> new.txt (собрали обратно с нужной фразой между 599 и 600 строками) |
tr столбец в строку
|
cat /var/db/repos/gentoo/profiles/use.desc | awk '{print $1 " " }' | tr -d '\n' |
head / tail / cut / awk / sed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
Команды head и tail выводят по умолчанию десять первых и последних строк соответственно потока или файла. Требуемое количество строк может быть указано. head -3 /etc/passwd tail –f /var/log/messages Вывод требуемых полей с помощью cut cut -f1 /etc/hosts cut -f1,3 -d: /etc/passwd Потоковый редактор sed Потоковый редактор sed позволяет либо прочитать входной поток для обработки из стандартного потока ввода, либо осуществить чтение текстового файла, заданного в качестве аргумента. Обработанный текст передается в стандартный поток вывода. Редактор sed работает с целыми строками текста. - номером строки; - диапазоном строк с указанием первого и последнего номеров строк в диапазоне через запятую (например, команда sed '2,4d' удалит в потоке строки со второй по четвертую включительно). Можно указать диапазон до последней строки. Последняя строка обозначается символом доллара ($); - с помощью регулярного выражения или, в простейшем случае, подстроки, которая должна находиться в адресуемых строках. Удаление строк по подстроке $ ps -e | sed '/tty/d' Наиболее часто используются следующие команды языка sed: d — удаление p — вывод строки (от англ. print) s — замена искомой подстроки на заданную подстроку i — вставка строки a — добавление строки c — изменение всей строки на заданную строку q — выход без дальнейшей обработки и вывода строк y — команда транслитерации символ в символ = — команда печати номера строки Команда q редактора sed: sed /daemon/q /etc/passwd Замена строк с помощью sed: sed s/bash/zsh/ /etc/passwd Требуется вывести содержание файла /etc/group (файл с информацией о группах пользователей и членстве в них) следующим образом: - должны быть выведены только группы, включающие пользователя user1; - все знаки двоеточия должны быть заменены символом подчеркивания. Сложная команда sed sed -n /user1/s/:/_/gp /etc/group Добавление строк с помощью sed last | sed '/user1/a \#####################' Общий вид сценария awk: BEGIN Команды формирования заголовка отчета /шаблон/ { команды обработки строк } END Команды формирования завершения отчета Сценарий awk может состоять из трех частей: - команды формирования заголовка — следуют после BEGIN - команды основного цикла обработки строк заключаются в фигурные скобки - команды формирования завершения отчета — следуют после END Команды могут находиться в файле сценария, имя которого должно быть указано после опции -f, либо может быть задано в качестве аргумента awk. Если шаблон для команды не указан, то обработке подвергаются все строки. Если же, наоборот, шаблон задан, а команда — нет, то в stdout выводятся только строки, подходящие шаблону. Например, следующая команда выведет из файла /etc/passwd все строки, содержащие подстроку bash. awk /bash/ /etc/passwd Для этого необходимо вывести первое и третье поле этого файла. Утилита awk позволяет обращаться к полям строк, разделенных с помощью пробелов или табуляций, следующим образом: $0 — вся строка, $1 — первое поле, $2 — второе и т. д. В нашем случае разделителем полей является двоеточие, поэтому данный символ надо указать после опции -F Вывод требуемых полей обеспечивает команда print. awk -F: '/bash/{print $1,$3}' /etc/passwd Фильтрация по числовому значению awk -F: '$3>100{print $1,$3}' /etc/passwd Одной из наиболее часто используемых встроенных переменных является NR — номер строки в потоке. Так, в предыдущем примере перед именами пользователей можно вывести номера строк, считанных из файла /etc/passwd. awk -F: '$3>100{print NR,$1,$3}' /etc/passwd Пример демонстрирует, как можно получить список только тех файлов, длина имен которых больше 15 символов. ls | awk 'length($0)>15' |
expand / Замена символов табуляции на пробелы
|
Команда expand предназначена для преобразования символов табуляции в пробелы. По умолчанию символ табуляции заменяется восемью пробелами, однако можно точно указать требуемое количество пробелов для замены табуляции. Имеется команда unexpand, заменяющая пробелы символами табуляции echo -e 'Строка\tс\tтабуляцией' echo -e 'Строка\tс\tтабуляцией' | expand -3 |
fmt / Простое форматирование текста
|
Команда fmt предназначена для форматирования текста. Команда объединяет и разделяет строки так, чтобы результирующая строка имела заданную длину (по умолчанию — 75 символов). Команда fmt пытается разделить длинные строки, начиная с длины строки, меньшей на 7%, чем установленная максимальная длина строки. Опция -w позволяет указать ширину текста в символах. Если необходимо только разделять строки, но не объединять их, то следует использовать опцию -s. ls -l /home | fmt -w50 -s |
sort / Сортировка строк
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Команда sort предназначена для сортировки строк файлов — аргументов. Если файлы не указаны, команда сортирует строки из стандартного потока ввода. По умолчанию команда sort сортирует строки в алфавитном порядке по возрастанию. При необходимости сортировки строк в порядке убывания используется опция -r . Команда sort способна также сортировать текстовый поток не только по целым строкам, но и по отдельным полям строк. Разделителем полей по умолчанию считается пробел. Если используется иной разделитель полей, его следует указать после опции -t. Для указания номера поля для сортировки используется опция -k. Опция -n позволяет задать команде sort не алфавитный, а числовой порядок сортировки. Пример показывает, как отсортировать учетные записи пользователей, в порядке возрастания их UID. sort -t: -k3 –n /etc/passwd В файле /etc/passwd разделителем полей является двоеточие. Это установлено опцией -t. Сортировка была выполнена по третьему полю (опция -k3), в котором содержатся UID пользователей. Сортировка была проведена в числовом порядке, что было установлено опцией -n. |
sort / uniq / Вывод неповторяющихся строк
|
Фильтр uniq удаляет повторения строки в сортированном потоке. Команда в примере выведет строки файлов f1 и f2 так, что если какая-либо строка имеется в обоих файлах, то в поток вывода попадет только одна ее копия. cat f1 f2 | sort | uniq Опция -c команды uniq позволяет подсчитать количество вхождений каждой строки во входном потоке. Опция -d позволяет вывести только дублирующийся строки, что помогает, например, узнать, какие строки имеются одновременно в разных файлах. Опция -u выводит только уникальные (не дублированные) строки. Для игнорирования регистра при сравнении строк можно установить опцию -i. Если строки входного потока разделены на поля, то можно пропустить заранее заданное количество полей до определения уникальности строки. Для пропуска первых полей, разделенных пробелами, необходимо указать их количество после опции -f. Например, команда uniq –f6 пропустит шесть первых полей входного потока при определении уникальности строк. |
join / Объединение строк двух файлов по общему полю
|
Команда join построчно объединяет содержимое заранее отсортированных файлов по общему полю. Выходная информация направляется в стандартный поток вывода. По умолчанию предполагается, что поля отделяются друг от друга пробелами или табуляцией. Опция -t позволяет указать требуемый символ-разделитель полей. Объединение производится по первым полям строк файлов. Если необходимо произвести объединение строк файлов не по первым полям строк, то номера этих полей необходимо указать после опций -j1 — для первого файла и -j2 — для второго файла. Содержимое файлов должно быть отсортировано этим полям. Для того чтобы вывести вместе с объединенными строками непарные строки, которые обычно не выводятся, необходимо использовать опцию -a. После этой опции следует указать номер файла, из которого будут выведены непарные строки. Наоборот, опция -v позволяет вместо объединенных строк вывести только непарные строки того файла, номер которого указан после этой опции. |
wc / Подсчет количества и нумерация строк
|
Команда wc позволяет подсчитывать количество символов, слов и строк в файле, указанном в качестве аргумента или в стандартном потоке ввода. wc /etc/hosts cat /etc/hosts | wc При необходимости можно установить вывод только числа: строк — с использованием опции –l; слов — при установленной опции –w; символов — при использовании опции -c. who | wc -l |
nl / Нумерация строк
|
Команда nl позволяет пронумеровать строки в тексте, считанном из файла или из потока ввода. Команда cat -b также нумерует строки, однако возможности команды nl намного шире. Опции nl позволяют устанавливать формат нумерации строк, особым образом нумеровать пустые строки, устанавливать шаг нумерации и т. п |
tr / Замена символов с помощью команды tr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
Команда tr читает поток ввода и преобразует его. Она позволяет выполнять преобразования, приведенные далее в списке. - Замена символов в потоке. Задают два набора символов. Символы из первого набора заменяются соответствующими по порядку символами из второго набора. - При использовании опции -d удаляются символы, указанные в наборе. - Исключение повторения символов в потоке. Символы, повторы которых должны быть исключены, задаются в наборе — опция -s. - Замена символов в потоке с последующим устранением их повторов. При этом задаются два набора символов и устанавливается опция -s. Вначале команда tr заменяет символы, а затем устраняет повторения символов из второго набора. - Удаление символов из потока с последующим устранением повторов. Этот режим требует установки опций -d и -s. Вначале удаляются символы из первого набора, а затем устраняются повторы из второго Слово капсом echo tarelka | tr a-z A-Z Удаление символов Здесь в качестве входного потока был использован вывод команды ls /, из которого были удалены все символы перевода строк. ls / | tr -d '\n' Устранение повторов выполняет опция -s echo root | tr -s o Опция -c команды tr позволяет инвертировать смысл задаваемого множества символов, т. е. удалить при использовании -d все, кроме символов, указанных в наборе. Например, команда tr –dc 0-9 удалит во входном потоке все, кроме цифр echo root | tr -cd o\\n С опцией -t команда tr обрезает длину первого набора по длине второго, для того чтобы количество символов в них равнялось. Можно указать класс символов из набора предопределенных символов [:alnum:] Символы алфавита в любом регистре и цифры [:alpha:] Символы алфавита в любом регистре [:blank:] Пустое множество [:cntrl:] Управляющие символы [:digit:] Десятичные цифры [:graph:] Все символы, которые могут быть напечатаны, кроме пробела [:lower:] Алфавитные символы в нижнем регистре [:print:] Все символы, которые могут быть напечатаны [:punct:] Все символы пунктуации [:space:] Пробел или табуляция [:upper:] Алфавитные символы в верхнем регистре [:xdigit:] Шестнадцатеричные цифры echo "str" | tr [:lower:] [:upper:] |
paste / Слияние строк
|
При необходимости вывести в одну строку содержимое файла можно использовать команду paste -s. Так, приведенная в примере 8.45 команда выведет в виде одной строки содержимое файла /etc/hosts. paste -s /etc/hosts Без опции -s команда paste выводит строки файлов-аргументов параллель но, т. е. первая строка первого файла вместе с первой строкой второго файла и т. д. Если paste должна читать из стандартного потока ввода, то вместо имени файла указывают символ тире. Колонок вывода будет столько, сколько тире. ls / | paste - - - - - - - - |
od / Получение дампа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
Команда od позволяет получить восьмеричный, десятичный или шестнадцатеричный дамп потока или файла. В первом столбце команда od выводит смещение в потоке (адрес). Далее выводятся значения считанных из потока символов. echo ABC | od -toC Опции -to команды od задают вывод дампа в восьмеричном формате, а опция -C указывает, что входной поток должен быть интерпретирован как символьный. Бывает удобно отобразить дамп не в виде численных значений, а с помощью "именованных символов". Для этого используются опции -ta echo ABC | od -ta Можно установить формат для вывода смещения. Для этого необходимо воспользоваться опцией -A, указав далее базис, где: -Ad — десятичное знаковое целое -Au — десятичное беззнаковое целое -Ao — восьмеричное целое -Ax — шестнадцатеричное целое -An — подавить вывод адреса смещения Аналогичные модификаторы можно использовать после опции -t для получения дампа в различных форматах. Для всех целых базисов можно указать следующие форматы: -C — символьный (char) -S — короткое целое (short) -I — целое (int) -L — длинное целое (long) Помимо od для получения дампов можно использовать hexdump. hexdump |
split / Разделение файлов на части
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
Команды split и csplit не являются текстовыми фильтрами. Они предназначены для разделения файлов на части, которые записываются в другие файлы со специальными именами. Эти файлы образуются в текущем каталоге. Команда split разделяет содержимое файла на части, которые записываются в отдельные файлы. По умолчанию команда записывает в отдельный файл каждые 1000 строк текста. Имена файлов начинаются со строки префикса и дополняются символами нумерации, начиная с aa. Если префикс не указан, то используется префикс по умолчанию — символ x, а имена файлов, в которые будут записаны части разделенного файла, будут иметь вид: xaa, xab, xac, ... Опция -l команды split позволяет указать, сколько строк должно содержаться в частях файла split –l9 /etc/passwd Опция -b команды split позволяет указать, сколько байтов должно содержаться в частях файла. Так можно разделять на части бинарные файлы. Команда split –b5K разделит файл на части, содержащие по 5 Кбайт кроме, возможно, последней части. Опция -Cn позволяет записывать в выходные файлы столько целых строк исходного файла, сколько можно записать, так, чтобы размер выходных файлов не превысил n байт. Например, команда split -C1024 разделит файл на час ти, не превышающие по размеру 1 Кбайт и содержащие целые строки исходного текста. Следует отметить, что команда csplit по умолчанию делит исходный файл на две части при удачном поиске, т. к. прекращает работу сразу после первого вхождения образца. Во второй части исходного файла могут содержаться вхождения образца, по которым исходный файл может быть разделен далее. Можно указать число повторов поиска образца в фигурных скобках. Например, команда csplit file /etc/ {1} повторит поиск регулярного образца один раз. В случае если повторный поиск неудачен, команда csplit завершает свое выполнение с выводом сообщения об ошибке, а все части исходного файла стираются. Опция -k отменят удаление выходных файлов в случае ошибки повторного поиска по регулярному выражению. |