Zdá se, že např.cat sed_data.txt | sed 's/b[0-9]{3}b/NUMBER/g'
které musím escape znaky k vytvoření regulárního výrazu. V tomto případě jsem musel uniknout složeným závorkám, aby to bylo interpretováno jako několikrát.
Proč? Očekával jsem, že vše bude regulární znak, pokud nebude escapován. Tj. naopak.
Přijatá odpověď:
Je to proto, že sed
používá POSIX BRE (Basic Regular Expressions) na rozdíl od ERE (Extended Regular Expressions), na které jste pravděpodobně zvyklí z Perlu nebo přátel.
Z sed(1)
manuálová stránka:
REGULAR EXPRESSIONS
POSIX.2 BREs should be supported, but they aren't completely because of
performance problems. The n sequence in a regular expression matches
the newline character, and similarly for a, t, and other sequences.
Relevantní citace z výše uvedeného odkazu:
Základní regulární výrazy nebo příchuť BRE standardizuje příchuť podobnou té, kterou používá tradiční příkaz UNIX grep. Toto je v podstatě nejstarší příchuť regulárního výrazu, která se dodnes používá. Jedna věc, která odlišuje tuto příchuť, je to, že většina metaznaků vyžaduje zpětné lomítko, aby metaznak získal jeho příchuť. Většina ostatních příchutí, včetně POSIX ERE, používá zpětné lomítko k potlačení významu metaznaků.
Doslovně citováno z komentáře Craiga Sanderse:
Všimněte si, že alespoň v GNU sed můžete sed říct, aby používal rozšířené regulární výrazy pomocí volby -r nebo –regexp-extended příkazového řádku. To je užitečné, pokud se chcete vyhnout ošklivému sed skriptu nadměrným escapováním.