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í prostředí. Programátoři jsou občas vyzváni, aby pracovali na různých souborech. Mohou přidávat, mazat a nahrazovat části nebo celý soubor, aby vyhovovaly 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.
Výměna řetězce v Bash
sed je zásadní a hodí se při nahrazování řetězců v souboru bash skripty. Editor řetězců 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 nahrazování 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 znalosti v regexových vzorech mohou mít také velkou hodnotu při nahrazování řetězce v bash.
Manipulace s Bash String
Při drobných nebo jednoduchých výměnách není sed vyžadován. Bash může manipulovat.
Například:
Při výměně fosslinuxu.gif s .mp4, sed není vyžadován.
Chcete-li provést proces pomocí bash, použijte níže uvedený kódovaný text:
# / bin / bash název_souboru = "fosslinux.gif "new_extension =" mp4 "# Nahradit .gif s .mp4 generated_file_name = $ název_souboru /.gif /.$ new_extension echo generovaný_soubor_název
Výměna řetězce pomocí sed
sed lze označit jako editor streamů. Sed může nahradit řetězec v souborech. Podívejme se na příklad souboru s názvem singleboardbytes.txt, který má následující informace:
Foss Linux je skvělý vzdělávací 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 „stránky„S“webová stránka”A přejmenujte soubor na fosslinux.txt.
Porozumění syntaxi sed
sed -i 's / search_string / replace_string /' název souboru sed - je příkaz použitý při provádění výše uvedené syntaxe '-i'- používá se při úpravě obsahu v původním souboru pomocí pomůcky pro nahrazení řetězce, kdykoli v souboru existuje hledaná hodnota. ''s„- toto je náhradní příkaz“řetězec_vyhledávání„- to představuje hodnotu řetězce, která má být hledána jako náhrada v původním souboru“replace_string'- to představuje hodnotu řetězce, která se používá k nahrazení hledané hodnoty. Řetězec by měl odpovídat řetězci nalezenému příkazem 'search_string'. ''název souboru'- toto je název souboru, na který bude použita náhrada.
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é provést spuštěním jako bash skriptu.
Výměna pomocí -i příkaz
Po spuštění příkazu je dalším krokem nahrazení pomocí -i příkaz. -i je reprezentace „na místě“, což znamená, že soubor je pouze nahrazen a nedochází k vytváření dalších souborů. V našem příkladu výše spusťte následující příkaz:
sed -i / site / website / g 'singleboardbytes.txt
Na obrázku níže vidíte vykřičník, který říká: Soubor „/ home / tuts / singleboardbytes.txt změněn na disku.„To ukazuje, že změny byly úspěšně provedeny.
Na následujícím obrázku je soubor obsahující změny provedené v předchozím kroku, a to jak v názvu souboru (singleboardbytes).txt na fosslinux.txt) a slovo stránky byl změněn na webová stránka.
Použití proměnné jako vyhledávaných hodnot a náhrad
S malou interpolací lze proměnné použít k nahrazení řetězců. První argument sed v tomto případě musí používat uvozovky místo jednoduchých uvozovek. Váš kód bude například podobný tomuto níže:
tuts () local search = $ 1 local replace = $ 2 # Poznámka: uvozovky sed -i "s / $ search / $ replace / g" singleboardbytes.txt
sed má dvě příchutě, a to: FreeBSD a Linux sed. Distribuce Linuxu 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říchuti do druhé.
Například při nahrazování obsahu souboru pomocí FreeBSD je třeba provést zálohu pomocí .Bak rozšíření. Nebo můžete zahájit zálohu pomocí prázdných párů uvozovek bezprostředně za notací -i, jak je uvedeno v bash syntaxi níže:
tuts () local search = $ 1 local replace = $ 2 sed -i "" "s / $ search / $ replace / g" singleboardbytes.txt
Pokud se při používání FreeBSD neprovede zálohování, jak je znázorněno výše v kódu syntaxe, dojde k chybě podobné té, která je uvedena níže:
sed: 1: "/ Users / user / path / tuts…": další znaky na konci příkazu h
Jak nahradit soubor a porovnat vzor číslic pomocí příkazu sed
Pokud skript úspěšně spustíte, bude provedeno vyhledávání veškerého číselného obsahu přítomného v souboru. Poté bude obsah nahrazen přidáním $ před čísla.
#!/ bin / bash # Zkontrolujte, zda hodnota argumentu příkazového řádku existuje nebo není, pokud [$ 1 != ""]; pak # Prohledejte celý řetězec obsahující číslice a přidejte $ sed -i 's / \ b [0-9] \ 5 \ \ b / $ & / g' $ 1 fi
Nahrazení řetězce pomocí příkazu awk
V takovém případě použijeme k nahrazení obsahu souboru místo příkazu sed příkaz awk. Rozdíl mezi těmito příkazy spočívá v tom, že příkaz sed přímo aktualizuje původní soubor, což není případ příkazu awk.
#!/ bin / bash # Zkontrolujte, zda hodnota argumentu příkazového řádku existuje nebo není, pokud [$ 1 != ""]; then # Hledat celý řetězec na základě data awk 'sub ("02/06/2020", "12/06/2020") 1' $ 1> temp.txt && mv tepl.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 nahrazení řetězce v souboru se může zdát složité, ale při správném dodržování našich pokynů zjistíte, že je mnohem lépe zvládnutelné.
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 nezpůsobili pohromu ze sedu. Když zadáte nesprávné příkazy, rozbijete počítač a způsobíte další potíže, jako je ztráta dat. Z bezpečnostních důvodů proto vždy kód zkopírujte a vložte do svého terminálu. Tím se zabrání pravopisným chybám, které by mohly váš počítač poškodit. Doufáme, že vám tento článek pomohl naučit se, jak pomocí tohoto článku nahradit řetězec v bash.