Редактируем текст в linux c SED
Spisu treści:
Dość często podczas pracy z plikami tekstowymi musisz znaleźć i zamienić ciągi tekstowe w jednym lub kilku plikach.
sed
jest trem ed itorem. Może wykonywać podstawowe operacje na plikach i strumieniach wejściowych, takich jak potoki. Za pomocą
sed
możesz wyszukiwać, znajdować i zamieniać, wstawiać i usuwać słowa i wiersze. Obsługuje podstawowe i rozszerzone wyrażenia regularne, które pozwalają dopasowywać złożone wzorce.
, porozmawiamy o tym, jak znaleźć i zamienić ciągi na
sed
. Pokażemy Ci również, jak przeprowadzić wyszukiwanie rekurencyjne i zamienić.
Znajdź i zamień ciąg na
sed
Istnieje kilka wersji
sed
, z pewnymi różnicami funkcjonalnymi między nimi. macOS używa wersji BSD, a większość dystrybucji Linuksa jest domyślnie wstępnie zainstalowana GNU
sed
. Użyjemy wersji GNU.
Ogólna forma wyszukiwania i zamiany tekstu za pomocą
sed
ma następującą postać:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- Domyślniesed
zapisuje swoje wyjście na standardowe wyjście. Ta opcja mówised
do edycji plików na miejscu. Jeśli dostarczone zostanie rozszerzenie (np. -I.bak), zostanie utworzona kopia zapasowa oryginalnego pliku.s
- Polecenie zastępcze, prawdopodobnie najczęściej używane polecenie w sed./ / /
- Znak ogranicznika. Może to być dowolny znak, ale zwykle używany jest znak ukośnika (/
).SEARCH_REGEX
- Normalny ciąg lub wyrażenie regularne do wyszukania.REPLACEMENT
- Ciąg zastępujący.g
- Globalna flaga zastępcza. Domyślniesed
czyta plik linia po linii i zmienia tylko pierwsze wystąpienieSEARCH_REGEX
w linii. Po dostarczeniu flagi zastępczej wszystkie wystąpienia zostaną zastąpione.INPUTFILE
- nazwa pliku, na którym chcesz uruchomić polecenie.
Dobrą praktyką jest umieszczanie cudzysłowów wokół argumentu, aby meta-znaki powłoki nie rozwijały się.
Zobaczmy przykłady użycia polecenia
sed
do wyszukiwania i zastępowania tekstu w plikach niektórymi z najczęściej używanych opcji i flag.
Do celów demonstracyjnych użyjemy następującego pliku:
plik.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
Globalna flaga zastępowania
sed
zastępuje wszystkie wystąpienia wzorca wyszukiwania:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Jak można zauważyć, w poprzednim przykładzie podciąg
foo
wewnątrz łańcucha
foobar
również został zastąpiony. Jeśli nie jest to pożądane zachowanie, użyj wyrażenia granicznego ze słowami (
\b
) na obu końcach ciągu wyszukiwania. Zapewnia to, że częściowe słowa nie są dopasowane.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Aby rozróżnić wielkość liter we wzorcu, użyj flagi
I
W poniższym przykładzie używamy zarówno flag
g
i
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
Łatwiejszą i bardziej czytelną opcją jest użycie innego znaku ogranicznika. Większość osób używa pionowego paska (
|
) lub dwukropka (:), ale możesz użyć dowolnego innego znaku:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
Możesz także użyć wyrażeń regularnych. Na przykład, aby wyszukać wszystkie 3-cyfrowe liczby i zastąpić je ciągiem znaków, którego użyłbyś:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Inną przydatną funkcją sed jest to, że można użyć znaku handlowego
&
który odpowiada dopasowanemu wzorowi. Postać może być użyta wiele razy.
Na przykład jeśli chcesz dodać nawiasy klamrowe
{}
wokół każdej 3-cyfrowej liczby, wpisz:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Last but not least, zawsze dobrym pomysłem jest utworzenie kopii zapasowej podczas edycji pliku za pomocą
sed
. Aby to zrobić, podaj rozszerzenie opcji
-i
. Na przykład, aby edytować
file.txt
i zapisać oryginalny plik jako
file.txt.bak
, należy użyć:
sed -i.bak 's/foo/linux/g' file.txt
ls
Rekurencyjne Znajdź i zamień
Czasami chcesz rekurencyjnie przeszukiwać katalogi w poszukiwaniu plików zawierających ciąg i zastępować ciąg we wszystkich plikach. Można to zrobić za pomocą poleceń takich jak
find
lub
grep
aby rekurencyjnie znajdować pliki w katalogu i przesyłać nazwy plików do
sed
.
Następujące polecenie będzie rekurencyjnie wyszukiwać pliki w bieżącym katalogu roboczym i przekazywać nazwy plików do
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Aby uniknąć problemów z plikami zawierającymi spacje w ich nazwach, użyj opcji
-print0
, która mówi
find
aby wydrukować nazwę pliku, a następnie znak null i
-print0
wyjście do
sed
za pomocą
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Aby wykluczyć katalog, użyj opcji
-not -path
. Na przykład, jeśli zastępujesz ciąg w lokalnym repozytorium git, aby wykluczyć wszystkie pliki zaczynające się od kropki (
.
), Użyj:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Inną opcją jest użycie polecenia
grep
aby rekurencyjnie znaleźć wszystkie pliki zawierające wzorzec wyszukiwania, a następnie potokować nazwy plików do
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Wniosek
Chociaż może się to wydawać skomplikowane i złożone, na początku wyszukiwanie i zamiana tekstu w plikach na
sed
jest bardzo prosta.
Aby dowiedzieć się więcej o poleceniach, opcjach i flagach sed, odwiedź instrukcję GNU sed i samouczek Grymoire sed. Jeśli masz jakieś pytania lub uwagi, zostaw komentarz.
sed terminalUżywanie VisiPics do znajdowania i usuwania duplikatów zdjęć
Zmęczenie "podwójnych" zaśmiecania biblioteki zdjęć? To doskonałe darmowe narzędzie znajdzie duplikaty i pomoże Ci je przenieść.
Panel wprowadzania matematycznych wykorzystuje rozpoznawanie matematyczne wbudowane w Windows 7 do rozpoznawania odręcznych wyrażeń matematycznych. Możesz wtedy z łatwością używać go z procesorami tekstu lub tabelami obliczeniowymi. Panel wprowadzania matematycznych jest przeznaczony do używania z piórem tabletu na komputerze typu Tablet, ale można go używać z dowolnym urządzeniem wejściowym, takim jak ekran dotykowy, a nawet mysz.
Panel wprowadzania matematycznego używa czytnika matematycznego wbudowanego w system Windows 7 rozpoznawać odręczne wyrazy matematyczne. Możesz wtedy z łatwością używać go z procesorami tekstu lub tabelami obliczeniowymi.
Jak używać zastępowania tekstu w ios, aby rozwinąć fragmenty
Zastąpienie tekstu to dobra opcja do szybkiego rozszerzania fragmentów tekstu w iOS. Oto jak możesz to zrobić.