Инструменты пользователя

Инструменты сайта


регулярные_выражения._скрипты_для_sed_и_awk

AWK

AWK — интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам. Работает в bash (SH) скриптах.

Попробуем разобраться с AWK на примерах:

Синтаксис awk gawk [ключи] [программа] [ список файлов] -F fs - разделитель полей -f файл программы

Создадим список с которым будем работать и назовем его cars.txt.

plym fury 1970 73 2500
chevy malibu 1999 60 3000
ford mustang 1965 45 10000
volvo s80 1998 102 9850
ford thundbd 2003 15 10500
chevy maliby 2000 50 3500
bmw 325i 1985 115 450
honda accord 2001 30 6000
ford taurus 2004 10 17000
toyota rav4 2002 180 750
chevy impala 1985 85 1550
ford explor 2003 25 9500

Начнем работу.

вывод всего файла.

gawk '{print}' cars

Вывод отдельных столбцов

gawk '{print $1, $2, $5}' cars.txt

Использование шаблона

gawk ' /chevy/ {print}' cars.txt

Использование оператора соответствия

gawk '$1 ~ /h/' cars.txt

gawk '$1 ~ /^h/' cars.txt

gawk '$2 ~ /^[tm]/' cars.txt

gawk '$3 ~/5$/ {print $3, $1, «$» $5}' cars.txt

Сравнение

текстовое

gawk '«2000» ⇐$5 && «9000» > $5' cars.txt

числовое

gawk '2000 ⇐$5 && 9000 > $5' cars.txt

Оператор диаразона

gawk '/volvo/,/bmw/' cars.txt

Работа с файлами программы:

Создадим файл header

BEGIN{ print « Производ. Модель. Год. Пробег. Цена» }
{print}

gawk -f header cars.txt

Модифицируем файл header

BEGIN{ print « Производ. Модель. Год. Пробег. Цена»
print «————————————-«
}

/volvo/,/bmw/ {print}
END {
print »————————————–«
}

Проверим

gawk -f header cars.txt

Использование ИЛИ

BEGIN{ print » Производ. Модель. Год. Пробег. Цена»
print «————————————-«
}

/volvo/ || /bmw/ {print}
END {
print »————————————–«

}

Функция length

gawk ' {print length, $0}' cars.txt

Нумерациия строк

gawk ' {print NR, $0}' cars.txt

Разделители полей

Разбор файла /etc/passwd

BEGIN{ print «Пользователь \tДомашний каталог \t Интерпритатор», FS=»:» print «—————————————————»

}

$3>=1000 {print $1 «\t\t» $6 «\t\t» $7}

END {print «—————————————————»}

SED

sed (от англ. Stream EDitor) — потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.

Инструкции sed

a - append - добавить

с- change - изменить

d - delete - удалить

i - insert - вставить

n - next - следующаяя строка со следующей инструкцией

p - print - вывести

q - quit - завершить

r(файл) - добавление содержимого файла к выбранной строке

s - substitute - подставить.

флаги

g - global - глобальный режим (все значения)

p - print - вывести измененные строки

w - write - записывать в файл.

Примеры

Задвоение выбранных строк

sed '/ford/ p' cars.txt

вывод только измененных строк

sed -n '/ford/ p' cars.txt

вывод по номерам строк

sed -n '5,6 p' cars.txt

Вывод первых пяти строк

sed '5 q' cars.txt

Использование файла программы.

Создадим файл print_56 c содержимым.

5,6 p

sed -n -f print56 cars.txt

Добавление текста к строкам

sed '2 a\ +++++' cars.txt

sed '2 i\ +++++' cars.txt

Замена строк файл сhange_test

2,4 c \
++++++++++++++++++\
——————\
**.

sed -f сhange_test cars.txt

подставка.

файл subs_demo

s/ford/FORD/

sed -f subs_demo cars.txt

Запись измененных строк в файл

subs_demo2

s/ford/FORD/w temp

Запись диапазона строк в другой файл.

файл write_demo

2,4 w temp2

запись всех строк кроме выбранных

2,4 !w temp2

Инструкция (n следующий.)

файл next_demo

3 n

p

n для шаблона

next_demo2

/ford/ n

p

Несколько действий файл action

1,3 s/ford/FORD/
2,4 s/volvo/VOLVO
3 d

Добавление строк файл app_demo

2 a\
+++++++++++\
———–
3 p

Как получть из лога ftpd айпишники злодеев-брутфорсеров:

cat p.log | grep failed |cut -f1 -d«)» |cut -f2 -d«@» |sort| uniq

cat p.log – берем лог

grep failed – берем из лога строки содержащие слово failed

cut -f1 -d«)» – режем все что после «)»

cut -f2 -d«@» – режем все что до «@», остаются айпишники

sort| uniq – избавляемся от повторов

регулярные_выражения._скрипты_для_sed_и_awk.txt · Последнее изменение: 2014/01/29 23:11 (внешнее изменение)

DokuWiki Appliance - Powered by TurnKey Linux