MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Регулярные выражения в sed
23.09.2009
22:50
Раздел: Компьютер - Программирование - Регулярные выражения

В потоковом редакторе sed, для того чтобы спецсимволы рассматривались как обычные символы, можно их экранировать обратным слешем. А можно в качестве разделителей полей вместо прямого слеша "/" использовать двоеточие ":".


Пример:


Нужно закомментировать в *.cpp файле строку "namespace prog1 {", то есть добавить перед строкой символы "//". Это можно сделать различными способами:


sed -i 's/namespace prog1 {/\/\/ namespace prog1 {/' file.cpp

sed -i 's:namespace prog1 {:// namespace prog1 {:' file.cpp

sed -i 's:namespace prog1 {:// &:' file.cpp


Кроме того, некоторые служебные символы, например "+", "*", "?" - надо экранировать обратным слешем. А служебные символы ".", "[", "]" - не нужно:


# echo _0000s_0001_unknown_2.tif | sed 's/_[0-9]\+[a-z]_[0-9]\+_//g'
unknown_2.tif


Внимание! Еще одна особенность sed, как минимум версии 4.1.5, в том, что он не понимает метасиволов вида "\d", "\w" и.т.д. Вместо них нужно использовать [0-9] или [a-z].



Примечание


По умолчанию необходимо экранировать все спец. символы в regex'ах, что крайне затрудняет чтение масок. Для того, чтобы экранировать спец.символы только в случае описания в тексте их самих - включите расширенный режим regex выражений с помощью опции -r.


Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования