Co oznacza #
znak w tej linii:
/bin/sed -e 's#abc#zzz#g'
źródło
Jest to separator, tak jak "/"
, jest taki sam jak 's/abc/zzz/g'
.
oznacza wyszukiwanie „abc” zamień je na „zzz”, flagą globalną, oznacza zrób to dla wszystkich „abc” w linii, nie tylko pierwszej.
Możesz również użyć alternatywnego separatora dla adresu wzoru, ale w takim przypadku musisz uciec z niego, aby poprawnie interpretować:
sed -r '\#abc#p'
To separator lub separator. Najczęściej używany jest /
jak w
sed 's/old/new/' file
Ale sed weźmie pierwszy znak po poleceniu (-ach) jako ogranicznik. Możesz użyć dowolnej dogodnej postaci, na przykład ...
sed 's%old%new%' file
Jest to bardzo przydatne, jeśli plik zawiera /
(lub inne konwencjonalne znaki rozdzielające). Możesz wybrać jako separator jakąś postać, o której wiesz, że nie będziesz musiał jej sed
wyrażać, oszczędzając ci dużo irytującej ucieczki.
Powiedzmy, że chcesz wymienić
https://askubuntu.com/questions
z
https://askubuntu.com/posts
Możesz użyć
sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file
Ale lepiej użyć
sed 's|https://askubuntu.com/questions|https://askubuntu.com/posts|' file
/
można go zastąpić innym znakiem w kontekstach innych niż polecenies
(zastępcze) - ale w takim przypadku należy go uciec za pierwszym razem, gdy np.sed '/foo/d'
(Usuń dopasowanie liniifoo
) staje sięsed '\#foo#d'
sbabeb
robi to samo cos/a/e/
.