вторник, 30 июля 2013 г.

Sed mans

Команда s - substitution (замена)
sed s/ОБРАЗЕЦ/ЗАМЕНА/

Sed использует в качестве разделитея первый символ после s (кроме обратного слеша \ и символа новой строки):
sed -i "s/строка/новая строка/g" file
тоже самое
sed -i "s#строка#новая строка#g" file
-i заставляет sed делать замену в исходном файле без вывода на экран.

Обратный слеш перед разграничительным символом, отменяет его спецзначение.
\xabc\xdefx
выведет abcxdef

По умолчанию команда s заменяет только первое совпадение, чтобы заменить все найденные совпадения используется модификатор /g
$ echo кот этот, был самый обычный кот | sed 's/кот/котенок/g'

котенок этот, был самый обычный котенок


Опция -n отменяет вывод на стандартный выход.  
Модификатор /p - Если замена имела место, то вывести результат.

Вывести только те строки, где произошла замена.
sed -n 's/gnome/penguin/p' file

Использование символа & когда искомый ОБРАЗЕЦ неизвестен

Символ & (амперсанд), будучи помещен в состав ЗАМЕНЫ, означает любой найденный в тексте ОБРАЗЕЦ.
"& " - Заменяется на строку, указанную в регулярном выражении. 
Например:
$ echo 1234 | sed 's/[0-9]*/(&)/'
(1234)


Числовой модификатор

Это число от 1 до 512, которое ставится после последнего разделителя и указывает, какое по счету совпадение подлежит замене.
$ echo очень глупый пингвин | sed 's/[а-я]*/хороший/2'
очень хороший пингвин

Можно комбинировать цифровой модификатор с модификатором /g. Если нужно оставить неизменным первое слово, а второе и последующие заменить на слово "(удалено)", то команда будет такая:
$ echo очень глупый пингвин | sed 's/[а-я]*/(удалено)/2g'
очень (удалено) (удалено)

Модификатор d

Удаляет строки по регулярному выражению
sed '/pattern/d'


Команда ! (отрицание)

Символ восклицательного знака (!) инвертирует выбор
Замена "foo" на "bar" ИСКЛЮЧАЯ строки содержащие "baz":
sed '/baz/!s/foo/bar/g'
Удалим все строки кроме второй.
$ sed '2 !d' text.txt
Замена "foo" на "bar" ТОЛЬКО для строк содержащих "baz": Заменить все совпадения в файле twpol.txt с аргументами из файла grlog4 на префикс # плюс аргумент
cat grlog4 | while read i; do sed -i -e "s&$i&#$i&g" twpol.txt;done

Комментариев нет:

Отправить комментарий