Я нещодавно читав про sed, коли я стикався з цією темою. Мені потрібні приклади, щоб краще зрозуміти тему.
Я нещодавно читав про sed, коли я стикався з цією темою. Мені потрібні приклади, щоб краще зрозуміти тему.
Відповіді:
Оператор регулярних виразів інтервалу в базових регулярних виразах (BRE), як це підтримується стандартом sed
, посилається на \{x,y\}
.
Були б еквівалентні perl
оператори ERE (розширений) або PCRE ( сумісні) (з -r/-E
, -R
/ -P
з деякими sed
реалізаціями) {x,y}
.
Вони використовуються для визначення діапазону повторних підрахунків для регулярного вираження.
sed 's/<a\{3,12\}>/<b>/'
Буде чи замінити перше входження <
слід від 3 до 12 a
років з подальшими >
з <b>
.
На вході, як <a> <aa> <aaaa> <aaaaaaaa>
, він замінить <aaaa>
на <b>
.
Позначені регулярні вирази частіше називаються групами захоплення .
В BRE, це з \(...\)
і з ERE / PCRE з (...)
. Вони використовуються для зйомки тексту, який порівнюється регулярним виразом, щоб використовувати його або як зворотний посилання, або як підстановка. Вони також можуть бути використані для групування (як і \(foo\)*
для будь-якої кількості foo
s).
В:
sed 's/\(.\)\(.\)\(.*\)\2\1/\1\2<\3>\2\1/'
У нас є 3 позначені вирази, відомі як групи захоплення , персонаж ( .
повинен відповідати одному символу), відповідний першому, \(.\)
буде позначений тегом 1
і позначається як \1
пізніше в регулярному вираженні (так що, якщо перший \(.\)
захоплений a x
, \1
буде відповідати x
лише ), а також викликається в заміну.
На вході, подібному whatever -+foobar+-
, regexp знайде: (1:-)(2:+)(3:foobar)(2:+)(1:-)
і s
команда замінить його на -+<foobar>+-
.
Стандартні (POSIX) ERE не підтримують зворотних посилань (що \1
в regexp вище), тому (...)
існує лише для групування (як у (foo|bar)
або (foo){1,3}
), хоча деякі реалізації підтримують його як розширення. У наступному великому випуску специфікації POSIX буде вказано -E
параметр для sed
регулярних виразів використовувати ERE. \1
у regexp (зворотні посилання) все ще не підтримуватимуться, але \1
в s
заміні розширитись до того, що було відповідне відповідним теговим виразом.
python
, perl
, PCRE або сумісні регулярні вирази також дозволяють давати довільні імена позначених виразів (замість того , щоб просто 1
, 2
... пронумерованих зліва направо). Детальну інформацію див. У їх посібнику.