GNU/Linux >> Znalost Linux >  >> Linux

Výměna řetězce v Bash

Bash je příkazový proces kompatibilní se systémem UNIX, jehož hlavním úkolem je manipulovat s řetězci prováděnými v prostředí shellu. Programátoři jsou občas vyzváni, aby pracovali na různých souborech. Mohou přidávat, odstraňovat a nahrazovat části nebo celý soubor, aby odpovídal jejich práci. To vyžaduje znalost nahrazení řetězce v bash. Ukládání dat může být dočasné nebo trvalé v závislosti na povaze dat. Řetězec souboru je nezbytný při nahrazování obsahu souboru.

Nahrazení řetězce v Bash

sed je zásadní a hodí se jako pomoc při nahrazování řetězců v souboru bash skripty. Řetězcový editor lze použít různými způsoby k nahrazení obsahu souboru v bash. Alternativní, ale zvukový editor řetězců je awk, který lze uvést do hry při nahrazení hodnoty řetězce ze souboru pomocí bash. Tento článek pomocí příkladů ukáže, jak lze obsah souboru nahradit v bash. Všimněte si, že znalost vzorců regulárních výrazů může být také velmi cenná při nahrazování řetězce v bash.

Manipulace s bashovými řetězci

Při drobných nebo jednoduchých výměnách není sed vyžadován. Bash může provést manipulaci.

Například:
Při nahrazení souboru fosslinux.gif souborem .mp4 není sed vyžadován.
Pro spuštění procesu pomocí bash použijte kódovaný text níže:

#/bin/bash
file_name="fosslinux.gif"
new_extension="mp4"

# Replace .gif with .mp4
generated_file_name=${file_name/.gif/.$new_extension}

echo $generated_file_name

Nahrazení řetězce pomocí sed

sed lze označit jako editor streamu. Sed může nahradit řetězec v souborech. Podívejme se na příklad souboru s názvem singleboardbytes.txt, který obsahuje následující informace:
Foss Linux je skvělý výukový web pro každého uživatele Linuxu. Podívejte se na články publikované Foss Linuxem na jejich stránkách.

Nyní z našeho souboru musíme nahradit slovo „web “ s „webem ” a přejmenujte soubor na fosslinux.txt .

Porozumění syntaxi sed

sed -i 's/search_string/replace_string/' filename
sed – is the command used in the execution of the above syntax
‘-i’ – used in the modification of contents in the original file with a replacement string aid whenever the search value exists in the file.
‘s’ – this is the substitute command
‘search_string’ – this represents the string value that is to be searched for replacement in the original file
‘replace_string’ – this represents the string value that is used to replace the searched value. The string should match the string found by the ‘search_string’ command.
‘filename’ – this is the filename whereby the replacement will be applied.

Spusťte ve svém terminálu následující příkaz:

sed 's/site/website/g' singleboardbytes.txt > fosslinux.txt

Poznámka:Výše ​​uvedený příkaz můžete také spustit tak, že jej vložíte jako bash skript.
Nahrazení pomocí -i příkaz

Po spuštění příkazu je dalším krokem nahrazení pomocí -i příkaz. -i je reprezentace pro „na místě“, což znamená, že soubor je pouze nahrazen a nedochází k vytváření dalších souborů. Pomocí našeho příkladu výše spusťte následující příkaz:

sed -i 's/site/website/g' singleboardbytes.txt

Na obrázku níže můžete vidět vykřičník, který říká:Soubor „/home/tuts/singleboardbytes.txt se na disku změnil.“ to ukazuje, že změny byly úspěšně provedeny.

Na obrázku níže je soubor obsahující změny provedené v předchozím kroku, a to jak názvu souboru (singleboardbytes.txt na fosslinux.txt), tak slova site byl změněn na web .

Použití proměnné jako vyhledávacích hodnot a náhrad

S trochou interpolace lze proměnné použít k nahrazení řetězce. První argument sed musí v tomto případě používat dvojité uvozovky místo jednoduchých uvozovek. Váš kód bude například podobný níže uvedenému:

tuts() {
local search=$1
local replace=$2

# Note the double quotes
sed -i "s/${search}/${replace}/g" singleboardbytes.txt
}

sed má dvě varianty, jmenovitě:FreeBSD a Linux sed . Linuxové distribuce používají Linux sed, zatímco uživatelé OS X používají FreeBSD sed. Tyto příchutě jsou zcela odlišné, a proto nelze přenášet příkazy z jedné příchutě sed do druhé.

Například při nahrazování obsahu souboru pomocí FreeBSD by měla být záloha provedena pomocí přípony .bak. Nebo můžete spustit zálohování pomocí prázdných uvozovek bezprostředně za notací -i, jak je znázorněno v syntaxi bash níže:

tuts() {
local search=$1
local replace=$2

sed -i "" "s/${search}/${replace}/g" singleboardbytes.txt
}

Pokud není záloha provedena při používání FreeBSD, jak je znázorněno ve výše uvedeném syntaktickém kódu, dostanete se do chyby podobné té, která je uvedena níže:

sed: 1: "/Users/user/path/tuts ...": extra characters at the end of h command

Jak nahradit soubor a porovnat číselný vzor pomocí příkazu sed

Pokud skript úspěšně spustíte, provede se vyhledávání veškerého číselného obsahu v souboru. Potom bude obsah nahrazen přidáním $ před čísla.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string containing digits and add $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi

Nahrazení řetězce pomocí příkazu awk

V tomto případě použijeme k nahrazení obsahu souboru příkaz awk místo příkazu sed. Rozdíl mezi těmito příkazy je v tom, že příkaz sed přímo aktualizuje původní soubor, což není případ příkazu awk.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string based on date
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

Závěr

Výše uvedené příklady jsou zásadní pro váš pokrok v učení, jak nahradit řetězec v Bash. Proto, abyste v tom byli dobří, budete muset pravidelně cvičit. Hledání a nahrazování řetězce v souboru se může zdát složité, ale pokud budete správně postupovat podle našich pokynů, zjistíte, že je mnohem snazší.

Je třeba poznamenat, že spouštění příkazů se může občas zdát lépe zvládnutelné, ale měli byste být opatrní, abyste ze sed nevyvolali zmatek. Když zadáte nesprávné příkazy, rozbijete počítač a způsobíte další potíže, jako je ztráta dat. Proto, abyste byli v bezpečí, vždy zkopírujte a vložte kód do svého terminálu tak, jak je. Předejdete tak pravopisným chybám, které by mohly poškodit váš počítač. Doufáme, že vám tento článek pomohl naučit se, jak nahradit řetězec v bash pomocí tohoto článku.


Linux
  1. Jak v Bash přidám řetězec za každý řádek v souboru?

  2. Jak mohu přidat řetězec na začátek každého souboru ve složce v bash?

  3. linux bash, řetězec velbloudího pouzdra k oddělení pomlčkou

  1. Použití odkazu na proměnnou bashového řetězce v Sed?

  2. Co dělá 'bash -c'?

  3. bash skript připojí text k prvnímu řádku souboru

  1. Jak nahradit řetězec v souboru (souborech)?

  2. The Bash ‘?

  3. Odstraňte výskyty řetězce v textovém souboru