Шукати в цьому блозі

середа, 16 квітня 2014 р.

Примеры использования sed

Синтаксис команды Описание
sed 's/Nick/John/g' report.txt
Заменяет каждое вхождение Nick на John в файле report.txt
sed 's/Nick|nick/John/g' report.txt
Заменяет каждое вхождение Nick или nick на John.
sed 's/^/ /' file.txt >file_new.txt
Добавляет 8 пробелов слева от текста для улучшения качества печати.
sed -n '/Of course/,/attention you \
pay/p' myfile
Выводит один абзац, начинающийся с "Of course" и заканчивающийся на "attention you pay"
sed -n 12,18p file.txt
Выводит только строки 12-18 файла file.txt
sed 12,18d file.txt
Выводит весь файл file.txt за исключением строк с 12 по 18
sed G file.txt 
Удваивает пробелы в file.txt
sed -f script.sed file.txt
Записывает все команды в script.sed и выполняет их.
sed '5!s/ham/cheese/' file.txt
Заменяет ham на cheese в file.txt за исключением 5-й строки
sed '$d' file.txt
Удаляет последнюю строку
sed '/[0-9]\{3\}/p' file.txt
Печатает только строки с тремя последовательными цифрами
sed '/boom/!s/aaa/bb/' file.txt
Если найден "boom", заменить aaa на bb
sed '17,/disk/d' file.txt
Удаляет все строки, начиная с 17-й, до "disk"
echo ONE TWO | sed "s/one/unos/I"
Заменяет one на unos независимо от регистра, поэтому будет напечатано "unos TWO"
sed 'G;G' file.txt
Утраивает пробелы в файле
sed 's/.$//' file.txt
Способ замены dos2unix :)
sed 's/^[ ^t]*//' file.txt
Удаляет все пробелы перед каждой строкой в file.txt
sed 's/[ ^t]*$//' file.txt
Удаляет все пробелы в конце каждой строки в file.txt
sed 's/^[ ^t]*//;s/[ ^]*$//' file.txt
Удаляет все пробелы в начале и в конце каждой строки в file.txt
sed 's/foo/bar/' file.txt
Заменяет foo на bar только в первом вхождении в строке.
sed 's/foo/bar/4' file.txt
Заменяет foo на bar только в четвертом вхождении в строке.
sed 's/foo/bar/g' file.txt
Заменяет foo на bar для всех вхождений в строке.
sed '/baz/s/foo/bar/g' file.txt
Заменить foo на bar только если строка содержит baz.
sed '/./,/^$/!d' file.txt
Удалить все последовательные пустые строки за исключением EOF
sed '/^$/N;/\n$/D' file.txt
Удалить все последовательные пустые строки, но оставить верхнюю пустую строку.
sed '/./,$!d' file.txt
Удалить все начальные пустые строки
sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' \ 
 file.txt
Удалить все замыкающие пустые строки
sed -e :a -e '/\\$/N; s/\\\n//; ta' \ 
 file.txt
Если файл заканчивается обратным сплешем, соединить его со следующим (полезно для скриптов оболочки)
sed '/regex/,+5/expr/'
Соответствует regex плюс 5 следующих строк
sed '1~3d' file.txt
Удалить каждую третью строку, начиная с первой.
sed -n '2~5p' file.txt
Печатать каждую пятую строку, начиная со второй.
sed 's/[Nn]ick/John/g' report.txt
Другой способ записи некоторых приведенных выше примеров. Вы можете предложить свой?
sed -n '/RE/{p;q;}' file.txt
Печатает только первое соответствие RE (регулярного выражения)
sed '0,/RE/{//d;}' file.txt
Удаляет только первое соответствие
sed '0,/RE/s//to_that/' file.txt
Изменяет только первое соответствие
sed 's/^[^,]*,/9999,/' file.csv
Заменяет первое поле на 9999 в CSV-файле
s/^ *\(.*[^ ]\) *$/|\1|/;
s/" *, */"|/g;
: loop
s/| *\([^",|][^,|]*\) *, */|\1|/g;
s/| *, */|\1|/g;
t loop
s/ *|/|/g;
s/| */|/g;
s/^|\(.*\)|$/\1/;
Скрипт sed для конвертирования CSV-файла в файл с вертикальной чертой в качестве разделителя (работает только с некоторыми типами CSV, со встроенными кавычками и запятыми).
sed ':a;s/\(^\|[^0-9.]\)\([0-9]\+\)\\
([0-9]\{3\}\)/\1\2,\3/g;ta' file.txt
Меняет формат чисел в file.txt с 1234.56 на 1.234.56
sed -r "s/\<(reg|exp)[a-z]+/\U&/g"
Переводит любое слово, начинающееся с reg или exp в верхний регистр.
sed '1,20 s/Johnson/White/g' file.txt
Производит замену Johnson на White только в строках 1 - 20.
sed '1,20 !s/Johnson/White/g' file.txt
Предыдущий пример наоборот (заменяет везде, кроме строк 1-20)
sed '/from/,/until/ { s/\/magenta/g; \ 
s/\/cyan/g; }' file.txt
Заменяет только между "from" и "until"
sed '/ENDNOTES:/,$ { s/Schaff/Herzog/g; \ 
s/Kraft/Ebbing/g; }' file.txt
Заменяет только со слова "ENDNOTES:" и до EOF
sed '/./{H;$!d;};x;/regex/!d' file.txt
Печатает абзац только если он содержит regex
sed -e '/./{H;$!d;}' -e 'x;/RE1/!d;\
/RE2/!d;/RE3/!d' file.txt
Печатает абзацы только если они содержат RE1, RE2 и RE3
sed 's/14"/fourteen inches/g' file.txt
Так вы сможете использовать двойные кавычки
sed 's/\/some\/UNIX\/path/\/a\/new\\
/path/g' file.txt
Работа с путями Unix
sed 's/[a-g]//g' file.txt
Удаляет все символы, начиная с a и заканчивая g из файла file.txt
sed 's/\(.*\)foo/\1bar/' file.txt
Заменяет только последнее соответствие foo на bar
sed '1!G;h;$!d' 
Замена команды tac
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1\
/;//D;s/.//'
Замена команды rev
sed 10q file.txt
Замена команды head
sed -e :a -e '$q;N;11,$D;ba' \ 
file.txt
Замена команды tail
sed '$!N; /^\(.*\)\n\1$/!P; D' \ 
file.txt
Замена команды uniq
sed '$!N; s/^\(.*\)\n\1$/\1/;\ 
t; D' file.txt
Обратная команда (что эквивалентно uniq -d)
sed '$!N;$!D' file.txt
Эквивалент tail -n 2
sed -n '$p' file.txt
... tail -n 1 (или tail -1)
sed '/regexp/!d' file.txt
Эквивалент grep
sed -n '/regexp/{g;1!p;};h' file.txt
Печатает строку, находящуюся перед первым соответствием регулярному выражению, но не включающую само соответствие
sed -n '/regexp/{n;p;}' file.txt
Печатает строку, находящуюся после первого соответствия регулярному выражению, но не включающую само соответствие
sed '/pattern/d' file.txt
Удаляет строки, соответствующие шаблону pattern
sed '/./!d' file.txt
Удаляет все пустые строки из файла
sed '/^$/N;/\n$/N;//D' file.txt
Удаляет все следующие друг за другом пустые строки, за исключением первых двух
sed -n '/^$/{p;h;};/./{x;/./p;}'\ 
file.txt
Удаляет последнюю строку каждого абзаца
sed '/^$/q'
Получает заголовок письма
sed '1,/^$/d'
Получает тело письма
sed '/^Subject: */!d; s///;q'
Получает тему письма
sed 's/^/> /'
Цитирует сообщение, вставляя "> " перед каждой строкой
sed 's/^> //'
Обратная команда (убирает цитирование из сообщения)
sed -e :a -e 's/<[^>]*>//g;/

Удаляет HTML-теги
sed '/./{H;d;};x;s/\n/={NL}=/g'\
 file.txt | sort \ 
| sed '1s/={NL}=//;s/={NL}=/\n/g'
Сортирует абзацы в file.txt в алфавитном порядке
sed 's@/usr/bin@&/local@g' path.txt
Заменяет /usr/bin на /usr/bin/local в path.txt
sed 's@^.*$@<<<&>>>@g' path.txt
Попробуйте и увидите :)
sed 's/\(\/[^:]*\).*/\1/g' path.txt
При условии, что path.txt содержит $PATH, выводит только первый путь в каждой строке
sed 's/\([^:]*\).*/\1/' /etc/passwd
Замена awk - показывает только пользователей из файла passwd
echo "Welcome To The Geek Stuff" | sed \ 
's/\(\b[A-Z]\)/\(\1\)/g'
(W)elcome (T)o (T)he (G)eek (S)tuff
Понятно без объяснений
sed -e '/^$/,/^END/s/hills/\ 
mountains/g' file.txt
Заменяет "hills" на "mountains", но только в блоках текста, начинающихся с пустой строки и заканчивающихся строкой с тремя символами "END", включительно.
sed -e '/^#/d' /etc/services | more
Показывает файл services без закомментированных строк
sed '$s@\([^:]*\):\([^:]*\):\([^:]*\
\)@\3:\2:\1@g' path.txt
Меняет порядок элементов в последней строке файла path.txt на обратный
sed '/regex/{x;p;x;}' file.txt
Вставляет новую строку выше каждой строки, соответствующей регулярному выражению
sed '/AAA/!d; /BBB/!d; /CCC/!d' file.txt
Ищет соответствие AAA, BBB и CCC в любом порядке
sed '/AAA.*BBB.*CCC/!d' file.txt
Ищет соответствие AAA, BBB и CCC в заданном порядке
sed -n '/^.\{65\}/p' file.txt
Печатает строки длиной 65 символов и более
sed -n '/^.\{65\}/!p' file.txt
Печатает строки длиной 65 символов и менее
sed '/regex/G' file.txt
Вставляет пустую строку под каждой строкой
sed '/regex/{x;p;x;G;}' file.txt
Вставляет пустую строку над и под каждой строкой
sed = file.txt | sed 'N;s/\n/\t/'
Нумерует строки в file.txt
sed -e :a -e 's/^.\{1,78\}$/\
 &/;ta' file.txt
Выровнять текст по правому краю
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e \
's/\( *\)\1/\1/' file.txt
Выровнять текст по центру


Изучаем команды Linux: sed

вівторок, 18 березня 2014 р.

Сборка Wireshark с поддержкой pcap

Сборка Wireshark/Tshark по Debian не позволяет открывать ссылки наподобие rpcap://172.31.4.16/eth1, пишет "No such device exists":
$ sudo tshark -ni rpcap://172.31.4.16/eth1

Всё дело в том, что изначально не включён параметр --with-pcap-remote. Исправляем это недоразумение.
Качаем архив в Wireshark · Download, распаковываем. Предположим, что это wireshark-1.10.6.tar.bz2:
$ tar xjf wireshark-1.10.6.tar.bz2
$ cd wireshark-1.10.6/

Далее, редактируем debian/rules отыскиваем CONFIGURE_FLAGS и добавляем в конец --with-pcap-remote. Это можно сделать, например, так:
$ sed -i "s/^\(CONFIGURE_FLAGS=.*\)--with-pcap-remote\(.*\)/\1\2/;s/^\(CONFIGURE_FLAGS=.*\)/\1 --with-pcap-remote/" debian/rules

Далее собираем deb-пакеты, для архитектуры по-умолчанию и, например, i386 (686):
$ dpkg-buildpackage
$ dpkg-buildpackage -ai386

В принципе можно ограничиться только своей архитектурой ;) Далее:
$ cd ..
$ sudo dpkg -i wireshark-common_1.10.6_amd64.deb wireshark_1.10.6_amd64.deb tshark_1.10.6_amd64.deb

четвер, 27 лютого 2014 р.

Ubuntu и разрешения Flash для доступа к камере и микрофону

Столкнулся с проблемой, в Ubuntu выводилась, но не нажималась кнопка "Разрешить" для Flash, когда приложение пыталось обратиться к камере и микрофону.
Решается просто. По ссылке Панель «Параметры конфиденциальности веб-сайтов» можно настроить конфиденциальность для конкретного сайта. Так-же можно настроить:

  • Панель «Глобальные параметры конфиденциальности»
  • Панель «Глобальные параметры хранения»
  • Панель «Глобальные параметры безопасности»
  • Панель «Параметры воспроизведения защищенного содержимого»
  • Панель «Параметры хранения веб-сайтов»
  • Панель «Пиринговая сеть»

http://www.macromedia.com/support/documentation/ru/flashplayer/help/settings_manager09.html

середа, 26 лютого 2014 р.

Windows XP - нет отзыва ни от клавиатуры, ни от мышки

Принесли "тазик" с "неработающей" Windows XP. Выяснилось, что сама ОС загружается, но вот беда, после загрузки нет отзыва ни от клавиатуры, ни от мышки. При этом если зайти в BIOS или банально загрузиться в Live CD то всё работает как часы.
Вылечилось следующим образом. Для начала снимаем винчестер, подключаем его к любой работающей Windows XP и проделываем следующие нехитрые манипуляции:

  1. запускаем Regedit;
  2. выделяем раздел HKEY_LOCAL_MACHINE;
  3. переходим в меню Файл → Загрузить куст → указываем папку с "упавшей" системой \WINDOWS\system32\config, открываем файл system;
  4. задаём имя куста, например SYS;
  5. зайходим в разделы HKEY_LOCAL_MACHINE\SYS\ControlSet00#\Control\Class, где # = 1, 2, ...;
  6. в подразделе {4D36E96B-E325-11CE-BFC1-08002BE10318} удаляем параметр LowerFilters (если есть) и задаём UpperFilters = kbdclass (тип параметра должен быть REG_MULTI_SZ); у меня тут был указан какой-то "левый" класс;
  7. в подразделе {4D36E96F-E325-11CE-BFC1-08002BE10318} удаляем параметр LowerFilters (если есть) и задаём UpperFilters = mouclass;
  8. выделяем раздел HKEY_LOCAL_MACHINE\SYS → меню Файл → Выгрузить куст.
Перегружаемся. Наблюдаем чудо - стали видны и мышь, и клавиатура.

вівторок, 18 лютого 2014 р.

Установка nodejs в Debian Wheezy

Стоит ли говорить о том, что в базовом дистрибутиве Debian Wheezy пакета nodejs нет? Это нормально, в этом весь Debian. Зато пакет nodejs есть в репозитории backports для Wheezy.
Давайте его (backports) подключим. Создаём файл настроек /etc/apt/sources.list.d/wheezy-backports.list следующего содержания:
deb http://ftp.us.debian.org/debian wheezy-backports main contrib non-free
после чего делаем
sudo aptitude update
Если вдруг, по каким-либо причинам, увидим ошибку GPG с предупреждением об NO_PUBKEY то выполняем простой сценарий:
KEY=0123456789ABCDEF; gpg --keyserver keys.gnupg.net --recv-keys $KEY; gpg --armor --export $KEY | sudo apt-key add -
после чего опять выполняем
sudo aptitude update
и замечаем, что ошибка исчезла. После этого запросим список пакетов nodejs и убедимся, что они есть:
aptitude search ^nodejs
Установить нужные пакеты можно, например, так:
aptitude install nodejs nodejs-dev


четвер, 6 лютого 2014 р.

Перепрошивка D-Link DIR-300 с DD-WRT на Wive-NG-RTNL

Перед прошивкой обязательно убедитесь, что в вашем маршрутизаторе 32мб DRAM, так как в противном случае прошивка Wive-NG-RTNL не будет работать. В прошивке DD-WRT это можно узнать на закладке status/sys-info.
Необходимо скопировать прошивку в маршрутизатор с помощью tftp, ftp или wget (скачал Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin.zip, распаковал его и выложил Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin к на web-сервер). Прошивка типа 2T2R необходима для работы с чипсетом Ralink 3052 и 1T1R для чипсета Ralink 3050.
Далее заходим на свой dd-wrt маршрутизатор по ssh и выполняем следующие не хитрые команды:
root@DD-WRT:~# cd /tmp
root@DD-WRT:~# wget http:/url/Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin
root@DD-WRT:~# mtd erase linux
root@DD-WRT:~# mtd -f write Wive_WR-150N-RT3050-1T1R.4.7.8.RU.06022014.bin linux
root@DD-WRT:~# reboot
После перезагрузки точка загрузится с новой прошивкой. Логин и пароль изменятся на стандартные для Wive-NG: Admin/Admin (да, да, именно с большой буквы).

Вернуть dd-wrt прошивку обратно можно, например, так:
cd /tmp
wget ftp://login:password@ip/ddwrtconsole.bin 
mtd_write erase Kernel_RootFS
mtd_write write ddwrtconsole.bin Kernel_RootFS

Для смены MAC адреса на WAN порту необходимо ввести команды:
nvram_set 2860 CHECKMAC NO
nvram_set 2860 WAN_MAC_ADDR 00:xx:xx:xx:xx:xx 
reboot