Jak wymienić ciąg w pliku w Bash

Jak wymienić ciąg w pliku w Bash

Jako programista może być konieczne pracować z różnymi typami plików, aby przechowywać dane tymczasowo lub na stałe. Czasami może być konieczne zastąpienie części pliku lub zmodyfikowania konkretnej zawartości pliku. Aby zastąpić zawartość w pliku, musisz wyszukać konkretny ciąg pliku. „sed” Polecenie służy do zastąpienia dowolnego ciągu w pliku za pomocą skryptu Bash. To polecenie może być używane na różne sposoby, aby zastąpić zawartość pliku w Bash. „Awk„Polecenie można również użyć do wymiany ciągu w pliku. Ten samouczek pokaże, jak wymienić dowolną wartość ciągu z pliku za pomocą skryptu Bash.

01. Ogólna składnia dla SED
02. Wymień ciąg w pliku na skrypt bash sed
03. SED G i I Polecenia dla globalnego i nieczułych przypadków
04. Dopasowanie cyfr sed
05. Ogólna składnia dla AWK
06. Zastąp ciąg w pliku na skrypt Bash AWK
07. Wymień ciąg w pliku na czyste skryptowanie bash
08. Zastąp ciąg w pliku Perl One Liner

Przykładowe dane dotyczące wymiany ciągów Bash

Plik tekstowy o nazwie Obroty.tekst Wraz z następującą zawartością jest wyświetlanie operacji zastępczych.
Obroty.tekst

Obszar kwoty daty
01/01/2020 60000 Dhaka
10/02/2020 76000 Rajshahi
21/03/2020 54000 Khulna
15/04/2020 78000 Chandpur
17/05/2020 45000 Bogra
02/06/2020 67000 COMILLA

Ogólna składnia dla SED: Wymień ciąg w pliku

Podstawowa składnia ''sed„Polecenie do wymiany określonego ciągu w pliku jest podane poniżej.

Składnia

sed -i 's/search_string/zamiennik_string/' nazwa pliku

Każda część powyższej składni jest wyjaśniona poniżej.

'-I' Opcja służy do modyfikacji zawartości oryginalnego pliku za pomocą ciągu zastępczego, jeśli ciąg wyszukiwania istnieje w pliku.
'S' Wskazuje polecenie zastępcze.
'szukana fraza' zawiera wartość ciągu, która zostanie przeszukana w pliku w celu wymiany.
„zamiennik_string” zawiera wartość ciągu, która zostanie użyta do zastąpienia zawartości pliku, który pasuje 'szukana fraza' wartość.
'Nazwa pliku' zawiera nazwę pliku, w której zostaną zastosowane wyszukiwanie i wymiana.

Przykład 1: Wymień plik na polecenie „SED”

W poniższym skrypcie tekst wyszukiwania i ponownego miejsca zostanie pobrany od użytkownika. Jeśli ciąg wyszukiwania istnieje w „sprzedaży.txt ', a następnie zostanie zastąpiony ciągiem zastępczym. Tutaj zostanie przeprowadzone wyszukiwanie wrażliwe na sprawę.

#!/bin/bash
# Przypisz nazwę pliku
filename = "sprzedaż.tekst"
# Weź ciąg wyszukiwania
Przeczytaj -p „Wprowadź ciąg wyszukiwania:” Wyszukaj
# Weź wymien
odczyt -p „Wprowadź String zamień:” Wymień
Jeśli [[$ wyszukiwanie != "" && $ zamień != ""]]; Następnie
sed -i "s/$ search/$ zamień/" $ nazwa pliku
fi

Wyjście:

Przykład 2: Wymień plik na polecenie „sed” na flagę „g” i „i”

Poniższy skrypt będzie działał jak poprzedni przykład, ale ciąg wyszukiwania zostanie przeszukany na całym świecie pod kątem flagi „g”, a wyszukiwanie wrażliwe na sprawę zostanie przeprowadzone dla flagi „I”.

#!/bin/bash
# Weź ciąg wyszukiwania
Przeczytaj -p „Wprowadź ciąg wyszukiwania:” Wyszukaj
# Weź wymien
odczyt -p „Wprowadź String zamień:” Wymień
Jeśli [[$ wyszukiwanie != "" && $ zamień != ""]]; Następnie
sed -i "s/$ search/$ zamień/gi" 1 $
fi

Wyjście:

Przykład 3: Wymień plik na polecenie „SED” i dopasowany wzór cyfr

Poniższy skrypt wyszukiwa wszystkie treści numeryczne w pliku i zastąpi treść, dodając „$” symbol na początku liczb.

#!/bin/bash
# Sprawdź wartość argumentu wiersza poleceń lub nie
Jeśli [1 USD != ""]; Następnie
# Wyszukaj wszystkie ciąg zawierające cyfry i dodaj $
sed -i 's/\ b [0-9] \ 5 \ \ b/$ &/g' $ 1 $
fi

Wyjście:

Wymień ciąg w pliku na polecenie „AWK”

''awk Polecenie to kolejny sposób na wymianę ciągu w pliku, ale to polecenie nie może zaktualizować oryginalnego pliku bezpośrednio jak 'sed ' Komenda.

Przykład 4: Wymień plik na polecenie „AWK”

Poniższy skrypt będzie przechowywał zaktualizowaną zawartość w Temp.tekst plik, który zostanie przemianowany przez oryginalny plik.

#!/bin/bash
# Sprawdź wartość argumentu wiersza poleceń lub nie
Jeśli [1 USD != ""]; Następnie
# Wyszukaj cały ciąg na podstawie daty
awk 'sub („02/06/2020”, „12/06/2020”) print' $ 1> temp.TX && MV TEMP.TXT 1 $
fi

Wyjście:


W powyższym przykładzie polecenie „AWK” służy do wyszukiwania ciągu „02/06/2020”, który jest ostatnim datą w naszym przykładowym pliku. Dopasowany ciąg zostanie zastąpiony nowym ciągiem „12.06.2020”. Ciąg wynikający z tego, czy zastąpiony, czy nie, jest wydrukowany na każdej linii.

Przykład 5: Wymień ciąg w pliku na czyste skryptowanie bash

W tym przykładzie wykonamy to samo zadanie z bashem podczas pętli i polecenia zastępowania ciągu Bash. Napiszemy wyjście do TMP złożyć i wymień oryginał na końcu skryptu. Zobacz kod poniżej:

#!/bin/bash
podczas linii odczytu; Do
# Wymień wszystkie instancje na linii Khulny na Dhaka
echo $ linia // khulna/dhaka
zrobione < Sales.txt > /TMP/sprzedaż.o.tekst
MV /TMP /sprzedaż.o.Sprzedaż TXT.tekst

Możesz zobaczyć, jak polecenie echo wykonuje wymianę w zmiennej linii, ponieważ skrypt odczytuje każdy wiersz w pliku tekstowym i zastąpi wszystkie instancje Khulna z nowym ciągiem Dhaka. Pętla While odczytuje z pliku wejściowego Obroty.tekst i zapisuje do pliku wyjściowego /TMP/sprzedaż.o.tekst. Wreszcie tymczasowy plik wyjściowy zastępuje oryginalny plik na mv Komenda.

Wyjście:

Przykład 6: Wymień ciąg w pliku na Perl One Liner

To zadanie jest w rzeczywistości bardzo proste Perl. Perl to stary, mniej popularny język, ale niezwykle potężny. Można to zrobić za pomocą polecenia wiersza w wierszu poleceń Bash:

Perl -pi.BAK -E 'S/DHAKA/BOGRA/G SPRZEDAŻY.tekst

-Liczba Pi.Bak mówi Perla, aby przetworzył plik na miejscu, a także utworzyć plik kopii zapasowej z .rozszerzenie Bak. Zamiennik będzie wszystkich instancji Dhaka Do Bogra Jako nowy tekst. Tutaj możesz zobaczyć łatwe wyjście tego polecenia:

WYJŚCIE:

Wniosek

W tym artykule pokazano, jak używać scenariuszy BASH do wymiany ciągów w pliku wyszukiwaniem i wymiany na wierszu poleceń w Bash. Istnieje wiele sposobów, w tym z poleceniami SED, AWK, Perl; Możesz użyć natywnych skryptów bash z pętlami i regexem, a więcej sposobów nie omawianych tutaj. Bash i Linux mają wiele sposobów wykonywania tej samej pracy.