SublimeText + Emmet - 23 buscar y reemplazar @JoseCodFacilito
Obsah:
Poměrně často při práci s textovými soubory budete muset najít a nahradit řetězce textu v jednom nebo více souborech.
sed
je tream ed itor. Může provádět základní textovou manipulaci se soubory a vstupními toky, jako jsou potrubí. Pomocí
sed
můžete vyhledávat, vyhledávat a nahrazovat, vkládat a mazat slova a řádky. Podporuje základní a rozšířené regulární výrazy, které vám umožní sladit složité vzory.
, budeme mluvit o tom, jak najít a nahradit řetězce
sed
. Ukážeme vám také, jak provést rekurzivní vyhledávání a nahrazení.
Najít a nahradit řetězec
sed
Existuje několik verzí
sed
, s některými funkčními rozdíly mezi nimi. macOS používá verzi BSD a většina linuxových distribucí je standardně předinstalovaná GNU
sed
. Použijeme verzi GNU.
Obecná forma vyhledávání a nahrazování textu pomocí
sed
má následující podobu:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- Standardněsed
zapisuje svůj výstup na standardní výstup. Tato volba řeknesed
aby upravoval soubory na místě. Pokud zadáte příponu (ex -i.bak), vytvoří se záloha původního souboru.s
- Náhradní příkaz, pravděpodobně nejpoužívanější příkaz v sed./ / /
- Oddělovací znak. Může to být libovolný znak, ale obvykle se používá znak lomítka (/
).SEARCH_REGEX
- Normální řetězec nebo regulární výraz, který se má vyhledat.REPLACEMENT
- Náhradní řetězec.g
- Globální náhradní příznak. Ve výchozím nastavenísed
čte řádek po řádku a mění pouze první výskytSEARCH_REGEX
na řádku. Po zadání příznaku nahrazení budou všechny výskyty nahrazeny.INPUTFILE
- Název souboru, na kterém chcete příkaz spustit.
Je dobrým zvykem kolem argumentu uvádět citace, aby se meta-znaky shellu nerozšiřovaly.
Podívejme se na příklady, jak pomocí příkazu
sed
vyhledávat a nahrazovat text v souborech některými z nejčastěji používaných voleb a příznaků.
Pro demonstrační účely použijeme následující soubor:
file.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
S příznakem globální nahrazení
sed
nahrazuje všechny výskyty vzoru vyhledávání:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Jak jste si možná všimli, v předchozím příkladu se také nahradí podřetězec
foo
uvnitř řetězce
foobar
. Pokud to není požadované chování, použijte výraz ohraničení slov (
\b
) na obou koncích vyhledávacího řetězce. Tím je zajištěno, že dílčí slova se neshodují.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Chcete-li, aby se velikost písmen nerozlišovala, použijte příznak
I
V níže uvedeném příkladu používáme příznaky
g
a
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
Nejjednodušší a mnohem čitelnější možností je použití jiného oddělovacího znaku. Většina lidí používá svislý pruh (
|
) nebo dvojtečku (:), ale můžete použít jakýkoli jiný znak:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
Můžete také použít regulární výrazy. Například prohledejte všechna 3 číslice a nahraďte je řetězcem, který byste použili:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Další užitečnou vlastností sed je, že můžete použít znak ampersand
&
který odpovídá uzavřenému vzoru. Znak lze použít vícekrát.
Pokud například chcete přidat každé složené číslo složené do složených závorek
{}
, zadejte:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
V neposlední řadě je vždy dobré vytvořit zálohu při úpravě souboru pomocí
sed
. Stačí jen rozšířit volbu
-i
. Například pro úpravu
file.txt
a uložení původního souboru jako
file.txt.bak
byste použili:
sed -i.bak 's/foo/linux/g' file.txt
ls
Rekurzivní hledání a nahrazování
Někdy chcete rekurzivně hledat adresáře pro soubory obsahující řetězec a nahradit řetězec ve všech souborech. To lze provést pomocí příkazů, jako je
find
nebo
grep
k rekurzivnímu nalezení souborů v adresáři a propojení názvů souborů k
sed
.
Následující příkaz rekurzivně vyhledá soubory v aktuálním pracovním adresáři a předá názvy souborů
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Chcete-li se vyhnout problémům se soubory obsahujícími jejich názvy, použijte volbu
-print0
která říká
find
aby se název souboru vytiskl, následovaný nulovým znakem a výstupem do
sed
pomocí
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Chcete-li vyloučit adresář, použijte volbu
-not -path
. Pokud například nahrazujete řetězec v místním repozitáři git, abyste vyloučili všechny soubory začínající tečkou (
.
), Použijte:
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'
Další možností je použít příkaz
grep
k rekurzivnímu nalezení všech souborů obsahujících vzorec vyhledávání a pak k
sed
názvů souborů k
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Závěr
Ačkoli se to může zdát složité a složité, vyhledávání a nahrazování textu v souborech
sed
je zpočátku velmi jednoduché.
Chcete-li se dozvědět více o příkazech
sed
, možnostech a příznakech, navštivte příručku GNU sed a tutoriál Grymoire sed. Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.
Jak najít a nahradit všechny obrázky ve Wordu najednou
Je snadné nahradit všechny obrázky v aplikaci Word. Použijte metodu Najít a nahradit, chcete-li najít požadovaný snímek a nahradit všechny obrázky novým obrazem v pohybu.
Jak najít a nahradit znaky zástupných znaků v aplikaci Excel
Snadný způsob, jak najít a nahradit zástupné znaky v aplikaci Excel jako normální text. Vyhledání a nahrazení požadovaného textu a čísel je velmi snadné pomocí
Pomocí find & nahradit vložte textový řetězec za slovo do ms
Věděli jste, že můžete použít nástroj pro hledání a nahrazení v aplikaci Microsoft Word k vložení textového řetězce za slovo a provádět rychlé a lepší vyhledávání? Podívej jak.