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 \c
lub w c
zależ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 sed
kod dodający znaki nowej linii do obszaru szyku). Należy jednak pamiętać, że w niektórych sed
implementacjach 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