Istnieją dwa poziomy interpretacji: skorupa i sed.
W powłoce wszystko między pojedynczymi cudzysłowami jest interpretowane dosłownie, z wyjątkiem samych pojedynczych cudzysłowów. Możesz efektywnie utworzyć pojedynczy cytat między pojedynczymi cytatami, pisząc '\''(zamknij pojedynczy cytat, jeden dosłowny pojedynczy cytat, otwórz pojedynczy cytat).
Sed używa podstawowych wyrażeń regularnych . W BRE, aby traktować je dosłownie, znaki $.*[\^należy cytować, poprzedzając je odwrotnym ukośnikiem, z wyjątkiem wewnętrznych zestawów znaków ( […]). Litery, cyfry i (){}+?|nie mogą być cytowane (możesz uciec od cytowania niektórych z nich w niektórych implementacjach). Sekwencje \(, \), \n, aw niektórych implementacjach \{, \}, \+, \?, \|i inne backslash + alfanumeryczne mają specjalne znaczenie. Możesz uciec od nie cytowania $^niektórych pozycji w niektórych implementacjach.
Ponadto przed odwrotnym użyciem /wyrażeń regularnych potrzebujesz odwrotnego ukośnika . Możesz wybrać alternatywny znak jako separator, pisząc np. s~/dir~/replacement~Lub \~/dir~p; będziesz potrzebować odwrotnego ukośnika przed separatorem, jeśli chcesz uwzględnić go w BRE. Jeśli wybierzesz postać, która ma specjalne znaczenie w BRE i chcesz ją dosłownie uwzględnić, potrzebujesz trzech odwrotnych ukośników; Nie polecam tego, ponieważ może zachowywać się inaczej w niektórych implementacjach.
W skrócie, dla sed 's/…/…/':
- Napisz wyrażenie regularne między pojedynczymi cudzysłowami.
- Użyj,
'\''aby skończyć z jednym cytatem w wyrażeniu regularnym.
- Umieść ukośnik odwrotny przed
$.*/[\]^i tylko te znaki (ale nie wewnątrz wyrażeń w nawiasach). (Technicznie nie należy wprowadzić odwrotny ukośnik przed ]ale nie wiem od implementacji, że traktuje ]i \]różnie poza wyrażeń nawiasów).
- W wyrażeniu nawiasowym,
-aby być traktowanym dosłownie, upewnij się, że jest ono pierwsze lub ostatnie ( [abc-]lub [-abc]nie [a-bc]).
- W wyrażeniu nawiasowym,
^aby być traktowanym dosłownie, upewnij się, że nie jest ono pierwsze (użyj [abc^], nie [^abc]).
- Aby dołączyć
]do listy znaków pasujących do wyrażenia ^w nawiasach, ustaw go jako pierwszy znak (lub pierwszy po nim dla zestawu negacji): []abc]lub [^]abc](nie [abc]]ani[abc\]] ).
W tekście zastępczym:
&i \należy je cytować, poprzedzając je odwrotnym ukośnikiem, podobnie jak separator (zwykle /) i znaki nowej linii.
\po którym następuje cyfra ma specjalne znaczenie. \po której następuje litera ma specjalne znaczenie (znaki specjalne) w niektórych implementacjach, a \po niej inne znaki \club w czależności od implementacji.
- Z pojedynczymi cudzysłowami wokół argumentu (
sed 's/…/…/'), użyj, '\''aby wstawić pojedynczy cytat w tekście zastępczym.
Jeśli wyrażenie regularne lub tekst zastępczy pochodzi ze zmiennej powłoki, pamiętaj o tym
- Wyrażenie regularne to BRE, a nie dosłowny ciąg.
- W wyrażeniu regularnym nowa linia musi być wyrażona jako
\n(która nigdy nie będzie pasować, chyba że masz inny sedkod dodający znaki nowej linii do obszaru szyku). Należy jednak pamiętać, że w niektórych sedimplementacjach nie będzie działał w wyrażeniach nawiasów .
- W tekście zastępczej
&, \i nowe linie muszą być cytowane.
- Separator musi być cytowany (ale nie wewnątrz wyrażeń w nawiasach).
- Użyj cudzysłowów dla interpolacji:
sed -e "s/$BRE/$REPL/".
function sedPath { path=$((echo $1|sed -r 's/([\$\.\*\/\[\\^])/\\\1/g'|sed 's/[]]/\[]]/g')>&1) } #Escape path for use with sed