Co oznacza znak # w: / bin / sed -e 's # abc # zzz # g'?

10

Co oznacza #znak w tej linii:

/bin/sed -e 's#abc#zzz#g'
Khalith Basha
źródło

Odpowiedzi:

14

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'
Ravexina
źródło
24

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 sedwyraż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
Zanna
źródło
Warto zauważyć, że przynajmniej w GNU sed /można go zastąpić innym znakiem w kontekstach innych niż polecenie s(zastępcze) - ale w takim przypadku należy go uciec za pierwszym razem, gdy np. sed '/foo/d'(Usuń dopasowanie linii foo) staje sięsed '\#foo#d'
steeldriver
@steeldriver rzeczywiście! - Widziałem, że Ravexina dodał to do swojej odpowiedzi, więc być może zostawię moją :)
Zanna
1
Nie jest ważne, czy strumień zawiera znak separatora. Ważne jest, czy szukany lub zastępujący ciąg zawiera znak separatora.
kasperd
@kasperd o tak, prawda. Lekko zredagowałem :)
Zanna
Odpowiedź Zanny jest bardziej szczegółowa: pierwszy znak po poleceniu „s” określa separator używany w tym poleceniu. Możesz użyć tutaj dowolnej postaci. sbabebrobi to samo co s/a/e/.
rexkogitans