Open Way | Systems | Distro | Shell | Desktop | Applications
Network | Development | Download | OfftopicКарта сайта
FreeNotesФорум POSIX.ru
На главную страницу

Tips от Madskull'a: sed

Сергей Майков aka Madskull
http://www.mdsk.ru
2005.11.25

обработка INI-файла с помощью sedВ начало

С помощью sed легко можно организовать обработку конфигов вида:

----- begin config.cfg
[part1]
value11
key12=value12
# комментарий
   # комментарий не с начала строки.
   # следующее значение тоже не с начала. 
   # таким образом можно "экранировать" первый символ "["
   [not header, but value]

[part2]
value21
----- end config.cfg

Читаем содержимое раздела part1:

$ PART="part1"
$ sed -n "0,/^\[$PART\]/d;/^\[/,\$d;s/^\s*//;/^$/d;/^#/d;p" config.cfg
value11
key12=value12
[not header, but value]
$

Ну, а список разделов еще проще:

$ sed -n "/^\[/{s/^\[//;s/\]$//;p}" config.cfg
part1
part2
$


Памятка по командам SEDВ начало

a \textДобавить "text" после указанной строки (вывести), потом считать следующую.
b labelПерейти на метку, устанавливаемую, с помощью функции ":" , если label пуст, то перейти в конец скрипта.
c \textУдалить pattern space и вывести "text" на output .
dУдалить pattern space .
DУдалить pattern space до вставленной newline .
gЗаместить содержимое pattern space содержимым буфера hold space .
GДобавить к содержимому pattern space содержимое буфера hold space .
hЗаместить содержимое буфера hold space на содержимое pattern space .
HДобавить к содержимому буфера hold space содержимое pattern space .
i \textВывести текст на output перед указанной строкой.
nВывести pattern space на output и считать следующую строку.
NДобавить следующую строку к pattern space , разделяя строки вставленным newline .
pСкопировать pattern space на output .
PСкопировать pattern space до первой вставленной newline на output .
qПереход на конец input . Вывести указанную строку, (если нет флага -n ) и завершить работу SED
r rfileЧитать содержимое rfile и вывести его на output прежде чтения следующей строки.
t labelПерейти на метку, устанавливаемую с помощью функции ":" , если для этой строки была осуществлена замена с помощью функции "s" . Флаг осуществления замены восстанавливается при чтении следующей строки или при выполнении функции "s" .
w wfileДобавить pattern space к концу файла wfile . (Максимально можно использовать до 10 открытых файлов.)
xПоменять местами содержимое pattern space и буфера hold space .
! funcПрименять функцию func (или группу функций в {} ) к стокам НЕ попадающим в указанные адреса.
: labelУстанавливает метку для перехода по "b" и "t" командам.
=Выводит номер строки на output как строку.
{Выполняет функции до "}" , только когда выбрано pattern space . Группировка функций.
#Комментарий.
"#n" в скрипте равносильно установке флага -n

Выдираем ссылки из документаВ начало

cat index.html | sed -n 'H;${x;s/\n//g;s/ [hH][rR][eE][fF]=/\n/g;p}' | 
	# делаем ссылки в начале строки
	sed 's/[ >].*//;s/"//g'	# обрубаем концы и легкая косметика


Аналоги dos2unix и unix2dosВ начало

dos2unix:

$ sed -i 's/\r//' file

unix2dos:

$ sed -i 's/$/\r/' file


Убрать переводы строк в текстеВ начало

$ sed -ni 'H;${x;s/\n//g;p}' file



Надежный филиал. Посетителям нашей фирмы дается
туристическая сим карта даром. . компьютерные столы со скидкой