Pull to refresh

Comments 30

а как же sed и awk?

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

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

Очень удобно преобразовывать текст из одного формата в другой (к примеру access_log в SQL INSERT statements)
Хотел про это написать, но не стал. Подразумевается, что речь о совсем примитивных методах :-) Awk ведь не предел, можно и perl inliner применить :-)
А вообще, если не трудно, то примеры пишите сюда, это ведь и есть цель данной публикации
Пример:
netstat -n|grep ESTABLISHED|awk {'print $4“ “$5“ “$6'}|grep .80|sort -n|uniq -c|\
awk {'print $3'}|replace '.' ' '|awk {'print $1“.“$2“.“$3“.“$4'}|uniq -c|sort -n|\
awk '{if($1 > 15) print $2}'

Описание: особая конвейерная магия :)
если нет replace, то можно на tr заменить… и с апострофами не все в порядке, кое-где надо со скобкой поменять :)
Хабр их на «» заменял, пришлось извратиться :)
Помнится была задача — выборка последних ревизий в контроле версий (например за два дня)
Не нашел как это сделать стандартными средствами svn. Получился такой кодобред:
svn export . ../export
cd ../export
find . -type f -mtime +2 -exec rm {} \;
find -depth -type d -empty -exec rmdir {} \;
zip -r export.zip .

По этому поводу можно добавить случай, когда нужно сделать из файлов, полученных из репозитория, просто файлы, то есть удалить все папки .svn

find. -type d -name «.svn» | xargs rm -r $1

А вообще, с svn возможна масса вариаций
как раз svn export это и делает ;)
Тоже как-то написали утилиту на шарпе, а потом нашли свн экспорт :-)
зачем xargs, когда у find есть -exec?
head еще можно упомянуть как обратная tail'у

egrep -n -R 'Что-то' * - поискать что то в текущей директории и ниже, во всех файлах find -name '*.php' -exec egrep -nH 'Что-то' '{}' ';' - ищем только по файлам *.php
полезным может быть сочитание tail и head, например когда нужно вывести n-ю строку с конца или начала файла:
$ tail -n 5 file |head -n 1
это выведет 4-ю, с конца, строку
побольше бы примеров, цены бы не было данному топику… :)
cat access_log | cut -d' ' -f1 | sort | uniq -c | sort -r -d

imho, здесь лучше написать cat access_log | cut -d' ' -f1 | sort | uniq -c | sort -r -g
еще лучше тогда
cut -d' ' -f1 access_log | sort | uniq -c | sort -r -g

зачем там лишний cat?
Можно также упомянуть про tee, эта штука позволяет перенаправлять вывод одновременно в файл и на stdout, полезно при желании залогировать, что то требуещее интерактивного вмешательства.
С проходу приходит в голову следующее:

#apt-get dist-upgrade | tee dist-upgrade.log
>>cat — всего лишь один из способов вывода содержимого файла или нескольких файлов.

и «склеивания» нескольких файлов в один
Тоже для борьбы с DDoS, но с таким, который не делает ошибок, а тупо запрашивает главную страницу:
tail -20 /var/log/nginx_access.log | grep «GET / „ | cut -d' ' -f1 | sort | uniq -d | xargs ipfw -q table 9 add $1
Покажет те айпишники, которые за последние 20 записей в логе более одного раза запросили главную страницу. При том, что трафик идёт неслабый — маловероятная ситуация, что это будет живой человек. Хотя пострадавшие бывают.
Ну, и конечно, одного запуска недостаточно, у меня это повторяет скрипт с интервалом 1 секунда.
что-то кавычки перековеркались, но суть понятна.
Напечатать неуникальные строчки входного файла:

perl -ne 'print if ++ $_{$_} == 2' filename.txt
Была такая задача: Есть каталог с лог файлами, в котором постоянно появляются новые логи (логи собираются с оборудования которое надо мониторить), нажен был скритп который бы автоматически добавлял новые логи в конфиг newsyslog для ротации. Написал такой скрипт:

find /var/log -print | grep log$ | sed 's/\(.*\)$/\1 user\: user  666    7    1000    \*      JC      \/var\/run\/syslog.pid 30/g' >> /etc/newsyslog1.conf && sort -u /etc/newsyslog1.conf > /etc/newsyslog.conf
Очень по существу, так всегда лень заниматься этой ротацией
tail -f esparus.com.access.log | grep Yandex — просмотр в реальном времени посещений от яндекса =)
Если надо поправить какую-то штуку (windows-1251) в нескольких файлах с кодом, но лень искать где оно есть:

joe `grep windows-1251 *.php |cut -f 1 -d :|grep -v \~|sort -u`

Посмотреть размер и дату создания какого-то бинарника:
ls -l `which ls`
и скрипт это или бинарник
file `which mozilla`

узнать какие файлы и каталоги самые жирные в этом каталоге
du -s * | sort -n

Узнать когда обращались к файлу «stat file»

Если на веб сервере запрещен просмотр каталога, а надо побыстрому выложить файлов:
ls -1 | sed s/«^.*»/'&<\/a>
'/g >index.html

Если с виндов привалило вайлов с РаЗнЫм кейсом в названиях:
#!/bin/sh

for i in $*
do
mv $i `echo $i |tr [: upper:] [: lower:]`
done
Про index:
ls -1 | sed s/«^.*»/'<a href=«&»>&<\/a><br>'/g
Sign up to leave a comment.

Articles