2012-09-16 22 views
6

Czy ktoś wie, jaka jest pełna lista znaków specjalnych w sed?znaki specjalne w sed

Proszę nie udzielać odpowiedzi w taki sposób, że jest to ta sama lista znaków specjalnych dla grep, ponieważ to przekształca moje pytanie na: Czy ktoś wie, jaka jest pełna lista znaków specjalnych w grep?

+0

Dokumentacja dla sed (i grep) jest tym, czego szukasz. Czego tam nie znalazłeś? – Mat

+0

Widzę tylko przykłady znaków specjalnych, ale nigdy nie jestem pewna, czy jest to pełna lista znaków specjalnych. – mnr

+2

Nie jestem pewien, co masz na myśli przez "znak specjalny", ale w dokumentacji wymieniono wszystko, co możesz zrobić. Nie ma sensu replikować tej dokumentacji tutaj. – Mat

Odpowiedz

3

Myślę, że jest to pełna lista znaków [\^$. |? * +(), Na których sed zareaguje w sposób inny niż zwykły znak.

+2

Również zależy od dialektu. W Linuksie 'sed' znaki'() | +? 'Nie są specjalne same, tylko jeśli poprzedzone są ukośnikiem odwrotnym. – tripleee

+1

Również wewnątrz klasy znaków "^ -]" (ale nie innych) są specjalne. To naprawdę osobny mini-język. – tripleee

+1

Wewnątrz klasy znaków pod pozycją [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html) można również napisać wyrazy wrażliwe na język, takie jak '[[: alpha:]]' lub '[[: punct:] [: digit:]]', więc ':' ma również specjalne znaczenie - i jest to (jeszcze inny) mini-język. Adres URL zawiera zachowanie standardu POSIX standardowego (podstawowe wyrażenie regularne) i ERE (rozszerzone wyrażenie regularne). Opis POSIX-a ['sed'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html) rozwija się na ten temat. W przypadku każdego konkretnego systemu spójrz na lokalną stronę podręcznika. –

5

To zależy. Ściśle mówiąc, standard zgodny sed należy używać tylko podstawowych wyrażeń regularnych, dla których the standard stany:

Znaki specjalne BRE i konteksty, w których mają swoje szczególne znaczenie, są następujące:

.[\ Okres, z lewej nawias kwadratowy i ukośnik odwrotny muszą być specjalne, z wyjątkiem sytuacji, gdy są używane w wyrażeniu nawiasowym (patrz Wyrażenie wyraŜenia RE). Wyrażenie zawierające "[", które nie jest poprzedzone ukośnikiem odwrotnym i nie jest częścią wyrażenia nawiasowego, tworzy niezdefiniowane wyniki.

Gwiazdka jest specjalna, z wyjątkiem sytuacji, gdy jest używana w nawiasie, jako pierwsza litera całego BRE (po początkowym "^", jeśli występuje) lub jako pierwszy znak z podwyrażeniem (po wstępnym "^", jeśli występuje); zobacz BRES Dopasowane wiele znaków

^ okalającej będzie specjalny stosowany jako kotwicy (patrz BRE Expression kotwienia) lub jako pierwszego znaku wyrażenia wspornika (patrz RD Bracket wyrażenie)

$ dollar- znak jest specjalny, gdy jest stosowany jako kotwica.

Tak więc pełna lista to .[\*^$, ale kontekst ma znaczenie. Ponadto wiele sed oferuje opcje rozszerzonych wyrażeń regularnych (ERE), które rozszerzają listę i zmieniają kontekst, w którym znaki są specjalne. Na przykład bez grup ERE są tworzone przy użyciu \( i \), ale z ERE ( i ) same są specjalne i muszą być zmienione, aby były dosłownie dopasowane.