Оглавление

SED tips


обработка 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

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

В начало Оглавление

Убрать переводы строк в тексте

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

В начало Оглавление
Hosted by uCoz