sed

sed Polecenie zastępujące ciąg w pliku

sed Polecenie zastępujące ciąg w pliku
Za każdym razem, gdy pracujemy z dowolnymi plikami, bardzo powszechną praktyką jest dokonywanie modyfikacji tych plików poprzez znajdowanie i zastępowanie słów. Większość edytorów tekstu zapewnia różne metody oparte na GUI do wykonywania tych modyfikacji. Czasami jednak potrzebujesz sposobu na znalezienie i zastąpienie słów w pliku za pomocą terminala. Dlatego w tym artykule omówimy metodę używania polecenia sed do zamiany ciągu w pliku tekstowym. Rzucimy również światło na różne scenariusze, w których można użyć tego polecenia.

Uwaga: będziemy używać Linux Mint 20 do zademonstrowania użycia polecenia sed do zastąpienia ciągu w pliku. Możesz także użyć dowolnego innego smaku Linuksa, jeśli chcesz.

Użycie komendy sed:

Teraz pokażemy Ci kilka bardzo interesujących przykładów pokazujących użycie polecenia sed w Linuksie. Zobaczmy, jak to polecenie działa w różnych scenariuszach.

Tworzenie pliku tekstowego do demonstracji:

Aby zademonstrować użycie polecenia sed, chcielibyśmy pracować z plikiem tekstowym. Możesz jednak nawet utworzyć plik Bash lub dowolny inny wybrany plik. Po drugie, utworzymy plik w katalogu domowym, dzięki czemu nie musimy podawać żadnych skomplikowanych ścieżek podczas dostępu do tego pliku. W celu utworzenia pliku tekstowego należy wykonać następujące czynności:

Kliknij ikonę Menedżera plików znajdującą się na pasku zadań Linux Mint 20:

Teraz utwórz nowy plik tekstowy w katalogu domowym, klikając prawym przyciskiem myszy w dowolnym miejscu, a następnie wybierając opcję Nowy dokument z menu kaskadowego i opcję Pusty dokument z menu kaskadowego. Po utworzeniu pliku tekstowego nadaj mu odpowiednią nazwę. W tym konkretnym przykładzie nazwałem go jako sed.tekst.

Kliknij dwukrotnie ten plik, aby go otworzyć i wpisz w nim dowolny losowy tekst, jak pokazano na poniższym obrazku. Zapisz ten plik tekstowy, naciskając Ctrl + S, a następnie go zamknij.

Teraz uruchom terminal w Linux Mint 20, jak pokazano na poniższym obrazku:

Po uruchomieniu terminala w Linux Mint 20 możesz przejść przez wszystkie wymienione poniżej przykłady jeden po drugim.

Używanie polecenia sed do zastępowania wszystkich wystąpień danego słowa:

Możesz użyć polecenia sed do zastąpienia wszystkich wystąpień danego słowa w pliku tekstowym. Składnia osiągnięcia tego celu jest wymieniona poniżej:

$ sed 's/sed/FindWord/ReplaceWord/' plik.tekst

Tutaj musisz zastąpić FindWord słowem, które chcesz zastąpić, a ReplaceWord słowem, które chcesz zastąpić. Co więcej, musisz również zastąpić „plik” nazwą pliku, w którym chcesz dokonać tych zamienników. W tym scenariuszu zamieniłem FindWord na sed i ReplaceWord na replace. Nasza nazwa pliku była sed.tekst. Jest to również pokazane na poniższym obrazku:

Pomyślne wykonanie tego polecenia pokaże zmiany, które nastąpiły z powodu uruchomienia tego polecenia na twoim terminalu:

Używając polecenia sed do zamiany n-tego wystąpienia danego słowa w każdym wierszu:

Powyższy scenariusz był najprostszym scenariuszem zamiany, jednak czasami nie chcesz zastępować wszystkich wystąpień słowa, a raczej chcesz zastąpić tylko pierwsze, drugie lub n-te wystąpienie tego słowa we wszystkich wierszach. W tym celu możesz wykonać następujące polecenie:

$ sed plik 's/FindWord/ReplaceWord/num'.tekst

Tutaj musisz zastąpić FindWord słowem, które chcesz zastąpić, a ReplaceWord słowem, które chcesz zastąpić. Co więcej, musisz również zastąpić „plik” nazwą pliku, w którym chcesz dokonać tych zamienników. W tym scenariuszu zamieniłem FindWord replace i ReplaceWord na sed. Nasza nazwa pliku była sed.tekst. Również num odnosi się do wystąpienia lub pozycji słowa, które ma zostać zastąpione. W przedstawionym przykładzie chcę zastąpić pierwsze wystąpienie replace przez sed w każdym wierszu, jak pokazano na poniższym obrazku:

Pomyślne wykonanie tego polecenia pokaże zmiany, które nastąpiły z powodu uruchomienia tego polecenia na twoim terminalu:

Użycie polecenia sed do zastąpienia danego słowa w określonej linii:

Czasami chcesz zastąpić dane słowo tylko w określonej linii, a nie w całym dokumencie. Aby to zrobić, musisz wyraźnie określić ten konkretny numer wiersza w następującym poleceniu:

$ sed 'LineNum s/FindWord/ReplaceWord/' plik.tekst

Tutaj musisz zastąpić FindWord słowem, które chcesz zastąpić, a ReplaceWord słowem, które chcesz zastąpić. Co więcej, musisz również zastąpić „plik” nazwą pliku, w którym chcesz dokonać tych zamienników. W tym scenariuszu zastąpiłem FindWord sed i ReplaceWord na replace. Nasza nazwa pliku była sed.tekst. Ponadto musisz zastąpić LineNum numerem linii konkretnej linii, w której chcesz dokonać zamiany. W tym przykładzie chcieliśmy zamienić sed na replace w wierszu nr 2 naszego pliku, jak pokazano na poniższym obrazku:

Pomyślne wykonanie tego polecenia pokaże zmiany, które nastąpiły z powodu uruchomienia tego polecenia na twoim terminalu. Możesz łatwo zweryfikować, że wspomniane zmiany wystąpiły tylko w wierszu nr 2 naszego pliku, a nie w całym tekście.

Wniosek:

Ilekroć czujesz potrzebę zastąpienia dowolnego słowa w pliku, pierwszą rzeczą, którą musisz zrobić, jest zidentyfikowanie konkretnego wymagania i.mi. czy chcesz zastąpić to konkretne słowo w całym pliku, czy chcesz zastąpić określone wystąpienie tego konkretnego słowa, czy chcesz zastąpić to słowo w określonym wierszu. Po zidentyfikowaniu konkretnego scenariusza możesz użyć tej konkretnej metody z przykładów omówionych w tym artykule.

Gry How to Install and Play Doom on Linux
How to Install and Play Doom on Linux
Introduction to Doom The Doom Series originated in the 90s after the release of the original Doom. It was an instant hit and from that time onwards th...
Gry Vulkan for Linux Users
Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...
Gry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...