PowerShell nahradit metoda a operátor: syntaxe, příklady

8. června 2021 14361 Pohledy Jak používat PowerShell k získání souboru a některých informací o verzi aplikace

PowerShell Nahradit lze použít k nahrazení znaků, řetězců, textů nebo speciálních znaků. PowerShell má a Nahradit Metoda a Nahradit Operátor .

Tato zóna S vás naučí, jak používat PowerShell Nahradit Metoda a Nahradit Operátor provádět různé náhradní úkoly.

Průvodce má 2 části. První část pokrývá Nahradit Metoda s více příklady.

Poté se ve druhé části naučíte používat Nahradit Operátor , také s mnoha příklady.

Procházet témata příspěvků

Jak používat PowerShell Nahradit metodu několika příklady

Jak používat PowerShell Nahradit metodu několika příklady

Jak jsem zmínil v úvodu, tato část vás naučí, jak používat Vyměnit metodu . Sekce začíná syntaxí the Vyměnit metodu .

Syntaxe metody PowerShell Replace

Syntaxe souboru Nahradit Metoda je…

|_+_| |_+_|

Syntaxe dělá to samé. Jediný důvod, proč mám obojí, je ukázat, že můžete nahradit znaky nebo řetězce.

První syntaxe ukazuje, jak použít metodu PowerShell Replace Method k nahrazení znaků. Druhá syntaxe však ukazuje, jak nahradit řetězec.

Jak vypsat seznam metod v objektu PowerShell

Již jsem zmínil, že PowerShell má Replace Method a Operator. Všechny metody dostupné v objektu PowerShell můžete vypsat tak, že objekt přemístíte do Staňte se členem příkaz.

Chcete-li například najít metody dostupné v tomto objektu, spusťte příkaz níže:

|_+_|

Příkaz vrací spoustu metod. Zvýraznil jsem Nahradit Metoda na snímku obrazovky níže.

Kromě toho existuje další způsob, jak spustit Staňte se členem příkaz. Namísto vkládání předmětu do Staňte se členem můžete zadat objekt v parametru InputObject of Staňte se členem .

Zde je příklad…

|_+_|

Výsledek také uvádí řadu metod dostupných v objektu – včetně Nahradit Metoda .

Jak používat PowerShell Nahradit metodu několika příklady

Ještě poslední věc, než přejdu k další podsekci, když se podíváte na sloupec Popis výsledku posledních dvou příkazů, má syntaxi metody.

To je velmi užitečné, protože vám řekne, jak metodu používat.

Jak používat PowerShell Replace Method k nahrazení znaku v řetězci

V podsekci Syntaxe jsem zmínil, že můžete nahradit znaky nebo řetězce. Abych vám uvedl jednoduchý příklad, chci nahradit V ve Victor malým písmenem v.

Zde je příkaz…

|_+_|

A zde je výsledek v PowerShellu…

Hodnoty v metodě PowerShell Replace Method rozlišují velká a malá písmena. Hodnoty zkontrolují přesnou velikost písmen. Pokud jsem se například pokusil nahradit malé písmeno v ve Victor a pokusit se jej nahradit písmenem A, příkaz vrátí stejný výsledek.

Zde je příkaz, který jsem popsal v poznámce výše…

|_+_|

Když jsem spustil tento příkaz v PowerShellu, vrátil Victor, původní objekt, protože v řetězci není žádné malé písmeno v, Victor!

V prostředí PowerShell Nahradit Operátor části této příručky se dozvíte, že – na rozdíl od metody Nahradit – Nahradit Operátor nerozlišuje malá a velká písmena.

Jak používat metodu nahrazení prostředí PowerShell k nahrazení více řetězců v textovém souboru

V návaznosti na myšlenky v této příručce můžete také nahradit více řetězců v textovém souboru.

V tomto příkladu mám textový soubor s některými názvy serverů. Zde je snímek obrazovky textového souboru.

Jak používat metodu nahrazení prostředí PowerShell k nahrazení více řetězců v textovém souboru

Chci nahradit název serveru ITGServer1 za ITGServer4. Navíc chci nahradit ITGServer2 za ITGServer5 a ITGServer3 za ITGServer6.

Zde je skript, který provede úkol…

|_+_|

První řádek skriptu používá Získejte obsah k importu obsahu textového souboru do PowerShellu. Poté výsledek přenese do Pro každý objekt .

Konečně v rámci Pro každý objekt smyčky, PowerShell používá atematickou proměnnou $_ vytvořenou pro každý objekt Pro každý objekt pro výměnu položek podle specifikace.

Zřetězoval jsem metodu PowerShell Replace Method. Jinak skript vytvoří nežádoucí výsledek.

Chcete-li skript spustit, zkopírujte jej do PowerShell ISE a spusťte jej.

V poslední verzi skriptu PowerShell zobrazí výsledek v konzole. Můžeš napište výstup pippingem existujících příkazů do Set-Content příkaz.

Zde je aktualizovaný skript. Aby se předešlo chybám při zápisu, uložil jsem výstup předchozí verze skriptu do proměnné. Potom jsem tu proměnnou vložil Set-Content příkaz.

|_+_|

Zde je výstup nového textového souboru…

Jak používat metodu nahrazení prostředí PowerShell k nahrazení více řetězců v textovém souboru

Jak používat PowerShell Replace Method k nahrazení více znaků

Zpracování nahrazení více řetězců v textovém souboru je stejné jako nahrazení více znaků v řetězci. Z příkladu v poslední části je lepší zřetězit metodu Nahradit.

V tomto příkladu chci nahradit M v metodě na T. Navíc chci nahradit d D.

Zde je příkaz…

|_+_|

A výsledek v PowerShellu…

Jak používat metodu nahrazení prostředí PowerShell v kanálu

V poslední části jsem spustil tento příkaz bez propojení řetězce, Method to the Nahradit Metoda:

|_+_|

Mohu spustit stejný příkaz, ale tentokrát řetězec převede do metody Nahradit. Jakmile jej však předám do potrubí, musím zavolat řetězec s automatickou proměnnou potrubí $_.

Příkaz bude muset být upraven, jak je znázorněno níže:

|_+_|

Jak můžete vidět na obrázku níže, poslední příkaz poskytuje stejný výsledek jako příkaz v poslední podsekci…

Jak používat metodu nahrazení prostředí PowerShell v kanálu

Jak používat PowerShell Replace Method k nahrazení všech řetězců za znakem

V příkladu v této podsekci chci nahradit vše za posledním zpětným lomítkem, v tomto řetězci – c:programfiles vversion8uninstall.exe – prázdným řetězcem.

Tyto dva příkazy udělají svou práci.

|_+_|

První příkaz uloží řetězec do proměnné. Potom druhý příkaz pomocí metody PowerShell Replace Method nahradí vše za řetězcem prázdným místem.

Ve skutečnosti je vše po smazáno. Zde je výsledek příkazů..

Jak používat PowerShell Replace Method k nahrazení řetězce v textovém souboru

Mám textový soubor tzv Processfile1.txt . Textový soubor má hodnotu AgentSvc, kterou chci nahradit AgentSvc_New.

Jak používat PowerShell Replace Method k nahrazení řetězce v textovém souboru

Níže uvedené příkazy dokončí úkol…

|_+_|

První příkaz uloží cestu k souboru do proměnné. Také druhý příkaz uloží hodnotu, kterou chci najít, do jiné proměnné.

Třetí řádek navíc uloží nahrazující řetězec do jiné proměnné. Nakonec v posledním příkazu zavolám metodu Nahradit ve výsledku Získejte obsah příkaz.

Poté v rámci Replace Method použiji hodnotu uloženou v proměnných $find a $replace. Poté připojte výstup do Set-Content který aktualizuje textový soubor novými hodnotami.

Po spuštění příkazů je zde nová hodnota v textovém souboru.

Jak používat metodu PowerShell Replace k nahrazení dvojitých uvozovek jednoduchými uvozovkami

V této podsekci chci nahradit dvojitou uvozovku 234″20.1.2021 s jednoduchými uvozovkami. Zde jsou příkazy…

|_+_|

První řádek uloží řetězec, 234″20.1.2021 v proměnné. Poté jsem na druhém řádku použil metodu PowerShell Replace Method k nahrazení dvojitých uvozovek v řetězci jednoduchými uvozovkami.

Trik je v aplikaci a použití pravidel pro citování PowerShellu. PowerShell používá k určení doslovného řetězce jednoduché i dvojité uvozovky.

V tomto příkladu chceme nahradit dvojité uvozovky, , v řetězci jednoduchými uvozovkami, . Pokud si však vzpomenete, v PowerShell Replace Method potřebujete také uvozovky k určení hodnoty, kterou chcete nahradit, a nové hodnoty.

Abychom tedy uvedli aktuální hodnotu (dvojité uvozovky) v příkazu Nahradit, zalomíme dvojitou uvozovku do jednoduchých uvozovek – ‚‘.

Chcete-li navíc zadat novou hodnotu (jednoduché uvozovky), zabalte je do dvojitých uvozovek – .

Také kvůli přítomnosti dvojitých uvozovek v původním řetězci, 234″20.1.2021 , abych řetězec uložil do proměnné, musel jsem řetězec zabalit do jednoduchých uvozovek.

Vraťme se k příkazům…

|_+_|

Zde je výsledek v PowerShellu…

Jak používat metodu PowerShell Replace k nahrazení dvojitých uvozovek jednoduchými uvozovkami

I když tento příklad vypadá jednoduše, pokud nerozumíte pravidlům pro citování PowerShellu, budete mít problém přimět PowerShell k dokončení tohoto úkolu!

Jak používat PowerShell Replace Method k nahrazení přesné shody

Tato část nabízí další příklad PowerShell Replace Method. Tentokrát vás chci naučit, jak nahradit přesnou shodu v řetězci.

Příklad v této části pochází z tohoto stackoverflow.com vlákno. Uživatel, který zaslal dotaz, chce nahradit čaj v tomto řetězci, přinesl jsem čaj pro svůj tým s kávou.

Zde je příkaz, který dělá práci…

|_+_|

A zde je výsledek příkazu v PowerShellu…

Jak používat metodu nahrazení PowerShellu k nahrazení zpětného lomítka ()

V této podsekci nahradím jedno zpětné lomítko () v tomto řetězci, 23420.1.2021 s dvojitým zpětným lomítkem, (\). Zde je příkaz…

|_+_|

Výsledek v PowerShellu…

Jak používat metodu nahrazení PowerShellu k nahrazení zpětného lomítka ()

Jak uvidíte v části PowerShell Replace Operator této příručky, nahrazení jednoho zpětného lomítka za Replace Operator není tak jednoduché.

Jak nahradit neplatné znaky názvu souboru v PowerShell

Operační systém Windows obsahuje některé znaky, které nelze použít k pojmenování souborů nebo složek. Tyto znaky se obecně nazývají neplatné znaky názvu souboru.

Pokud se pokusíte vytvořit název souboru s některým ze znaků, zobrazí se chyba.

Pokud tedy napíšete skript PowerShellu, který používá nějaký výstup k vytvoření názvu souboru, ale tyto výstupy obsahují některý z neplatných znaků názvu souboru, musíte tyto znaky odstranit.

Skript popsaný v této podčásti nepoužívá metodu PowerShell Replace. Rozhodl jsem se jej však zahrnout, protože se domnívám, že řeší jedinečný problém, kterému může většina SysAdminů čelit.

Pokračujeme, mám z toho příklad, o kterém budu brzy diskutovat Stackoverflow.com otázka. Uživatel, který položil otázku, chce před použitím řetězce k vytvoření souboru odstranit neplatné znaky z řetězce.

Navíc pokud řetězec obsahuje mezery, uživatel chce zachovat mezery v názvu souboru.

Podíval jsem se na řešení preferovaná různými uživateli. Ten s nejlepším řešením zveřejnil John Longmuir .

V příkladu John chce odstranit všechny neplatné znaky názvu souboru v řetězci ‚abc* def.txt‘. Nicméně, jak požadoval původní autor otázky, chce zachovat mezery v řetězci.

Zde je Johnův scénář…

|_+_|

V prvním příkazu uloží řetězec do proměnné. Potom v první části druhého příkazu (před potrubím) převede $ na proměnnou me do datového typu [char].

Datový typ [char] je 16bitový znak Unicode.

V druhé části příkazu John převede výstup převedeného datového typu [char] do příkazu Where-Object. V rámci bloku skriptu Where-Object volá GetinvalidFileNameChars() Metoda Třída cesty , [IO.Path] .

Poté řekne PowerShellu, aby vrátil pouze hodnoty, které nejsou obsaženy v souboru GetinvalidFileNameChars() Metoda.

The GetinvalidFileNameChars() Metoda uvádí všechny neplatné znaky názvu souboru.

Nakonec, po odstranění neplatných znaků názvu souboru, použije PowerShell Join k vytvoření řetězce ze všech znaků.

Konečný výsledek je...Speciální (neplatné znaky názvu souboru) jsou pryč, ale řetězec je vrácen s mezerami!

Aby bylo použití snadné a založené na původním skriptu zveřejněném společností Stackoverflow.com Autor otázky, rozhodl jsem se přeměnit Johnův skript na funkci PowerShell.

Zde je funkce PowerShell, Remove-InvalidFileNameChars.

|_+_|

Jak používat PowerShell Nahraďte operátora několika příklady

Jak používat PowerShell Nahraďte operátora několika příklady

V první části této příručky jsem popsal různé příklady metody PowerShell Replace Method. V této části se zaměřím na PowerShell Replace Operator.

Tato část začíná diskusí o syntaxi PowerShell Replace Operator.

Syntaxe PowerShell Replace Operator

Syntaxe PowerShell Replace Operator je…

|_+_| |_+_|

Jedním z jasných rozdílů mezi metodou PowerShell a operátorem je způsob jejich použití. V metodě umístíte vedle objektu tečku (.), následovanou názvem metody a závorkami ().

Naopak u operátora přidáte za objekt PowerShell mezeru, za kterou následuje – a název operátora.

Takže v příkladech, které následují, místo použití .Nahradit() , budu používat -Nahradit !

Jak používat metodu nahrazení PowerShellu operátorem Znak v řetězci

K nahrazení znaku i znakem I v řetězci, Victor, použiji níže uvedený příkaz...

|_+_|

Výsledek v PowerShellu…

Na rozdíl od metody PowerShell Replace Method, která rozlišuje velká a malá písmena, PowerShell Replace Operator nikoli. Takže příkaz níže bude mít stejný výsledek jako předchozí příkaz…

|_+_|

Tentokrát jsem použil kapitál I na hodnotové straně Nahradit operátor. Všimněte si, že v řetězci není žádné velké I, Viktore.

Pokud tedy píšete skript PowerShellu, který potřebuje nahradit horní a dolní znaky, použijte namísto metody nahrazení operátor nahrazení.

Jak používat metodu nahrazení prostředí PowerShell k nahrazení více řetězců v textovém souboru

V části Metoda nahrazení jsem uvedl příklad, kde jsem v tomto textovém souboru nahradil názvy serverů.

Jak používat metodu nahrazení prostředí PowerShell k nahrazení více řetězců v textovém souboru

Chci nahradit název serveru ITGServer1 za ITGServer4. Navíc chci nahradit ITGServer2 za ITGServer5 a ITGServer3 za ITGServer6.

Zde je verze skriptu Replace Operator použitého v příkladu Replace Method…

|_+_| Stejně jako v příkladu Replace Method je část Replace Operator posledního skriptu zřetězena.

Jak používat PowerShell Replace Operator k nahrazení řetězců a znaků rozlišujících velká a malá písmena

Na různých místech této příručky jsem naznačil, že metoda PowerShell Replace Method rozlišuje malá a velká písmena. PowerShell Replace Operator však není.

V této části to chci ilustrovat na příkladu.

Tento příkaz například NENAhradí R, protože metoda Nahradit rozlišuje velká a malá písmena.

|_+_|

Tento příkaz však nahradí R, protože Nahradit operátor ve výchozím nastavení NErozlišuje malá a velká písmena

|_+_|

Jak používat PowerShell Replace Operator k nahrazení zpětného lomítka ()

V první části této příručky jsem použil tento příkaz PowerShell k nahrazení jediného zpětného lomítka () v tomto řetězci, 23420.1.2021 , s dvojitým zpětným lomítkem, (\)…

|_+_|

Jak vidíte, jednoduše jsem bez problémů použil jediné zpětné lomítko v metodě Nahradit.

Pokud však převedu poslední příkaz na verzi Nahradit operátora, zobrazí se mi chybová zpráva. Zde je verze příkazu Replace Operator:

|_+_|

Pokud spustím příkaz v PowerShellu, zobrazí se mi chybová zpráva…

Důvodem této chyby je to, že v PowerShellu je považováno za vzor regulárního výrazu. Abych tento problém vyřešil, musím přidat druhé zpětné lomítko v .

To způsobí, že jednoduché zpětné lomítko v bude vypadat jako dvojité, \. Druhé zpětné lomítko však říká PowerShellu, aby nepovažoval za vzor regulárního výrazu.

Takže příkaz bude nyní..

|_+_|

Nyní příkaz funguje jako kouzlo!

To je ono – komplexní a přepracovaný průvodce PowerShell Replace! Doufám, že vám to pomohlo?

Pokud vám to pomohlo, hlasujte Ano na otázku Byl tento příspěvek užitečná níže.

Případně můžete položit otázku, zanechat komentář nebo poskytnout další zpětnou vazbu pomocí formuláře Zanechat odpověď, který najdete na konci této stránky.

A nakonec, pro další PowerShell tech S Zones, navštivte naši stránku průvodce Windows PowerShell How-To. Velmi užitečná vám může být také naše stránka Práce z domova.

Reference a další čtení

  1. O metodách
  2. O operátorovi
  3. about_Quoting_Rules
  4. Jak na to: Definujte datové typy PowerShellu
  5. Třída cesty
  6. Jak extrahovat podřetězec Powershell z řetězce
  7. Powershell If Else Explained: Syntaxe a příklady