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.