Введение в Linux (110
..pdf9. КОМАНДЫ ДЛЯ ОБРАБОТКИ ТЕКСТА
Примеры на файле:
1 2 3D
03 1 4
1 2 3d
1 2 3
sort – команда для сортировки.
sort |
|
sort -n |
sort -r |
sort -f |
|||||
сортировка |
сортировка |
обратная |
без учета ре- |
||||||
строк |
чисел |
1 |
2 |
3D |
гистра |
||||
03 |
1 |
4 |
1 |
2 |
3 |
1 |
2 |
3d |
|
1 |
2 |
3 |
1 |
2 |
3d |
1 |
2 |
3 |
sort – R |
1 |
2 |
3d |
1 |
2 |
3D |
03 |
1 |
4 |
случайно |
1 |
2 |
3D |
03 |
1 |
4 |
|
|
|
|
uniq – выделяет уникальные строки. Требует перед собой сортировки
sort | uniq |
sort | uniq |
||||
уникальные |
уникальные без учета |
||||
03 1 4 |
регистра |
||||
1 |
2 |
3 |
03 |
1 |
4 |
1 |
2 |
3d |
1 |
2 |
3 |
1 |
2 |
3D |
1 |
2 |
3d |
|
|
|
|
|
|
cut – обрезка по полям, символам, блокам.
cut -d' ' - |
cut -d' ' - |
cut |
-d' ' - |
cut -d' ' - |
|||
f1 |
f2,3 |
f1-3 |
|
f2- |
|||
первое поле |
поля 2 и 3 |
поля c 1 по |
поля со |
||||
1 |
2 |
3D |
3 |
|
|
второго |
|
03 |
1 |
4 |
1 |
2 |
3D |
2 |
3D |
1 |
2 |
3d |
03 |
1 |
4 |
1 |
4 |
1 |
2 |
3 |
1 |
2 |
3d |
2 |
3d |
|
|
|
1 |
2 |
3 |
2 |
3 |
|
|
|
|
|
|
|
|
21
cut -d' ' -f- |
cut -b4 |
cut -b1,4 |
cut -b1-4 |
||
2 |
|
4 |
символ в |
1 и 4 символ |
с 1 по 4 |
поля до вто- |
строке |
1_ |
символ |
||
рого |
_ |
|
01 |
1_2_ |
|
1 |
2 |
1 |
|
1_ |
03_1 |
03 1 |
_ |
|
1_ |
1_2_ |
|
1 |
2 |
_ |
|
|
1_2_ |
1 |
2 |
|
|
|
|
|
|
|
|
|
|
wc(Word Count) – подсчёт количества символов, строк, слов.
wc |
wc -l |
wc |
-w |
wc -c |
все вместе |
кол-во строк |
кол-во слов |
кол-во |
|
4___12___27 |
4 |
12 |
|
символов |
|
|
|
|
27 |
tr (Translate) – преобразования множеств символов.
tr -d 3 |
tr 123 456 |
||||
удалить символ «3» |
превратить символы 123 |
||||
1 |
2 |
D |
соответственно в 456 |
||
0 |
1 |
4 |
4 |
5 |
6D |
1 |
2 |
3 |
06 |
4 |
4 |
1 |
2 |
|
4 |
5 |
6D |
|
|
|
4 |
5 |
6 |
|
|
|
|
|
|
fold – форматирование по ширине (умолчание 80 – как в терминалах).
fold -w 5
выровнять на ширину 5 1 2 3
D
03 1
4
1 2 3 d
1 2 3
expand, unexpand – преобразование табуляции в пробелы и наоборот, nl – печать номеров строк.
22
nl
1 1 2 3D
2 03 1 4
3 1 2 3d
4 1 2 3
head, tail – начало или конец файла (по умолчанию первые/последние 10 строк с края).
head -n1 |
head |
-n-1 |
tail -n1 |
|||||
первая строка |
все, |
до 1 с конца |
последняя строка |
|||||
1 |
2 |
3D |
1 |
2 |
3D |
1 |
2 |
3 |
|
|
|
03 |
1 |
4 |
|
|
|
|
|
|
1 |
2 |
3d |
|
|
|
|
|
|
|
|||||
tail -n+3 |
head |
-c14 |
head -c12 |
|||||
все, начиная с 3 |
14 первых символов |
12 |
первых символов |
|||||
1 |
2 |
3d |
1 |
2 |
3D |
1 |
2 |
3D |
1 |
2 |
3 |
03 1 |
4 |
03 |
|
1_(prompt) |
|
|
|
|
|
|
|
|
|
|
less, more – пейджеры (утилиты для просмотра текстовых файлов), dos2unix, unix2dos (0D0A → 0A),
iconv – конвертация кодировок, diff – разница файлов,
rev – перевернуть строки справа налево. grep – поиск текста,
•grep 'pattern' file(s),
•grep -A3 -B4 – 3 строки до и 4 строки после,
•grep -c = wc,
•grep -i – ignore-case,
•grep -q – quiet,
•grep -R – рекурсивный поиск,
•grep -v – not match,
•[abcde]
•[a-e]
23
•[:alnum:] ~ [A-Za-z0-9]
•для включения спецсимволов,
•] – ставим на первое место ([]abc]),
•^ – не первое место ([ab^c]),
•- – последнее место ([abc-]),
•. – любой символ,
•^,$
•\<, \> \b, \B
•RE followed by
? – 0 или 1,
* – 0 или более,
+ – 1 или более,
{n} – ровно n,
{n,} - минимум n,
{n,m} – от n до m,
•| – любой из шаблонов,
•могут быть связаны – тогда ставить подряд.
grep |
-A2 03 |
grep |
-B1 3d |
grep |
-i 3d |
|||
03 |
1 |
4 |
03 |
1 |
4 |
1 |
2 |
3D |
1 |
2 |
3d |
1 |
2 |
3d |
1 |
2 |
3d |
1 |
2 |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
grep |
^1 |
grep |
d$ |
grep |
-i d$ |
|||
1 |
2 |
3D |
1 |
2 |
3d |
1 |
2 |
3D |
1 |
2 |
3d |
|
|
|
1 |
2 |
3d |
1 |
2 |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
grep |
-v 2 |
grep |
[45] |
grep |
0[345] |
|||
03 |
1 |
4 |
03 |
1 |
4 |
03 |
1 |
4 |
|
|
|
|
|
|
|||
grep |
0[2-4] |
grep |
“0[2-4]\|3D” |
grep |
"^[0-9]\{2,\}" |
|||
03 |
1 |
4 |
1 |
2 |
3D |
03 |
1 |
4 |
|
|
|
03 |
1 |
4 |
|
|
|
|
|
|
|
|
|
|
|
|
24
10. SED
sed – потоковый обработчик текста (Stream EDitor), sed <script> <file>
Порядок работы.
1.Берет следующую строку.
2.Удаляет \n.
3.Помещает содержимое строки в т. н. pattern-space.
4.Запускаются команды.
5.Добавляется \n.
6.Печатается на экран.
7.Чистится pattern-space.
8.Переход к новой строке.
Адреса.
NUMBER – номер строки, FIRST~STEP – номар строки, шаг,
/REGEXP/ – строка, совпадающая с RegExp,
Если много слэшей – можно использовать процент (\%REGEXP%), /REGEXP/I – без учета регистра,
/REGEXP/M – для многострочных шаблонов, ADDR1,ADDR2 – диапазон адресов, ADDR1,+N – адрес + N строк далее,
ADDR1,~N – адрес, и до следующей строки, кратной N, ADDR! – отрицание (все кроме адреса),
$ – последняя строка.
Регулярные выражения (используется жадный алгоритм).
CHAR *, \*? \+
\{I\} – ровно I,
25
\{I,J\} – от I до J,
\{I,\} – не менее I, \(REGEXP\) – группировка,
. (точка) – любой символ), ^,$ – начало, конец строки,
[LIST], [^LIST] – множества символов, REGEXP1 | REGEXP2 – ИЛИ REGEXP1REGEXP2 – конкатенация,
\DIGIT – возврат к группе REGEXP в скобках, \n – конец строки.
Команды.
# – комментарий,
q [EXIT-CODE] – выход,
d – удалить pattern-space, перейти к следующей строке, p – напечатать pattern-space,
n – забрать (добавить) следующую строку в pattern-space, {COMMAND} – группировка команд, s/REGEXP/REPLACEMENT/FLAGS – замена,
Флаги.
g – все вхождения,
NUMBER – только вхождение номер NUMBER, p – если замена, то печатать,
w – если замены – печатать в файл, i(I) – без учёта регистра.
sed |
-n |
1p |
sed -n 1~2p |
sed |
-n \$p |
||||
1 |
2 |
3D |
|
1 |
2 |
3D |
1 |
2 |
3 |
|
|
|
|
1 |
2 |
3d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
|
|
sed |
-n |
'/3[a- |
sed |
-n |
'/3[a- |
sed |
-n |
'1,3p' |
|||
d]/p' |
|
d]/Ip' |
|
1 |
2 |
3D |
|
||||
1 |
2 |
3d |
|
1 |
2 |
3D |
|
03 |
1 |
4 |
|
|
|
|
|
1 |
2 |
3d |
|
1 |
2 |
3d |
|
|
|
|
|
|
|
|
|
|
|||
sed |
-n |
'3!p' |
sed |
-n |
'3,+1p' |
sed |
-n |
'1,~3p' |
|||
1 |
2 |
3D |
|
1 |
2 |
3d |
|
1 |
2 |
3D |
|
03 |
1 |
4 |
|
1 |
2 |
3 |
|
03 |
1 |
4 |
|
1 |
2 |
3 |
|
|
|
|
|
1 |
2 |
3d |
|
|
|
|
|
|
|
||||||
sed |
's/1 2/0/' |
sed |
's/[0-9]/x/' |
sed |
's/[0- |
||||||
0 |
3D |
|
|
x 2 |
3d |
|
9]\|d/x/' |
||||
03 1 4 |
|
x3 1 4 |
|
x 2 |
3d |
|
|||||
0 |
3d |
|
|
x 2 |
3d |
|
x3 1 4 |
|
|||
0 |
3 |
|
|
x 2 |
3 |
|
x 2 |
3d |
|
||
|
|
|
|
|
|
|
|
x 2 |
3 |
|
|
|
|
|
|
|
|
||||||
sed |
's/[0- |
sed |
's/[0- |
sed |
's/[0- |
||||||
9]\|d/x/g' |
9]\|d/x/Ig' |
9]\|d/x/2' |
|||||||||
x x |
xD |
|
x x |
xx |
|
1 |
x |
3D |
|
||
xx x x |
|
xx x x |
|
0x 1 4 |
|
||||||
x x |
xx |
|
x x |
xx |
|
1 |
x |
3d |
|
||
x x |
x |
|
x x |
x |
|
1 |
x |
3 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
11. AWK
AWK – текстовый процессор, шаблонно-ориентированный. Позволяет больше разных возможностей по сравнению с SED.
Структура файлаAWK: шаблон {действие} шаблон {действие}
...
Порядок работы:
1.Текст разделяется на записи (ROW), разделенные \n, и поля (FIELD), разделенные пробелом или табуляцией.
2.Для каждой строки сравнивает шаблон.
3.Если шаблон подходит – выполняет указанные действия.
27
4.Переходит к следующему шаблону.
5.Если не указан шаблон – делает для всех строк.
6.Если не указано действие – просто печатает строку.
7.BEGIN, END – специальные шаблоны, выполняемые в начале и конце обработки всего текста.
Синтаксис.
Условный оператор.
if (condition) then
{
action
}
else
{
action
}
Циклы.
for (;;)
for (a in array) do{
}while ()
while () {
}
print – печать текущей записи print expr-list
print fmt expr-list $1 – поле 1 $0 – вся строка
пробел – конкатенация
~ - соответствие регулярному выражению !~ - несоответствие регулярному выражению
28
Математические операторы:
atan2()
cos()
sin()
exp()
int()
log()
rand() - 0..1 sqrt
Строковые операторы:
index (str, substr) length(str) substr(str, from, len)
Переменные:
RS, FS – входные разделители строк и полей, ORS, OFS – выходные разделители полей, FNR – текущий номер строки,
NF – количество полей текущей строки.
Примеры.
1.
BEGIN { print “Hello world!”; exit }
2.
BEGIN {max=0}
{if (length($0) > max) max = length($0); } END { print max; }
12. LaTEX – СИСТЕМА ПОДГОТОВКИ ДОКУМЕНТОВ
CentOS – texlive-latex.
Пример построения отчёта.
\documentclass [11pt] {article} \author {A. Vladimirov}
\title {Test report}
29
\begin {document} \maketitle
\begin {tabular} {|c|c|} \hline
User & Home directory\\ \hline
User1 & /home/user1 \\ \hline
User2 & /home/user2 \\ \hline
\end {tabular} \\ Total count : 2 \end {document}
В результате получаем:
13. ТЕКСТОВЫЕ РЕДАКТОРЫ
Изначально для правки текста использовался редактор ed, который не выводил то, что правится. Просто вводились команды и всё. После ed поя-
вился vim (vi – от слова visual).
Современные редакторы (консоль):
1.ed,
2.nano (pico) – простой и понятный,
3.vi / vim – сейчас уже vim, это Vi Improved, имеет намного больше возможностей,
30