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

Sed Command Replace String File



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 ilustrują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, abyśmy nie musieli 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.txt.



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 zamknij go.

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/Znajdźsłowo/Zamień słowo/' plik.txt

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 zamian. W tym scenariuszu zamieniłem FindWord na sed i ReplaceWord na replace. Nasz plik nazywał się sed.txt. 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 zastępowania, 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's/Znajdźsłowo/Zamień słowo/num’ plik.txt

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 zamian. W tym scenariuszu zamieniłem FindWord replace i ReplaceWord na sed. Nasz plik nazywał się sed.txt. 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„Liczba linii s”/Znajdźsłowo/Zamień słowo/' plik.txt

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 zamian. W tym scenariuszu zamieniłem sed FindWord i ReplaceWord na replace. Nasz plik nazywał się sed.txt. Ponadto musisz zastąpić LineNum numerem wiersza konkretnego wiersza, w którym 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, tj. czy chcesz zastąpić to konkretne słowo w całym pliku, czy chcesz zastąpić określone wystąpienie to konkretne słowo lub 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.