Welcome to Our Website

Základy Používání Sed Stream Editor Manipulovat Text v Linux

Úvod

sed příkaz, krátký pro stream editor, provádí operace úprav na text pocházející ze standardního vstupu nebo souboru. sed upravuje line-by-line a neinteraktivním způsobem.

to znamená, že při volání příkazu provedete všechna rozhodnutí o úpravách ased provede pokyny automaticky., To se může zdát matoucí nebo neintuitivní, ale je to velmi silný a rychlý způsob, jak transformovat text, zejména jako součást skriptu nebo automatizovaného pracovního postupu.

tento tutoriál bude pokrývat některé základní operace a představí vám syntaxi potřebnou k ovládání tohoto editoru. Téměř jistě nikdy nenahradíte běžný textový editor sed, ale pravděpodobně se stane vítaným doplňkem k panelu nástrojů pro úpravu textu.

Poznámka: Tento tutoriál používá verzi GNU sed nalezenou na Ubuntu a dalších operačních systémech Linux., Pokud používáte macOS, budete mít verzi BSD, která má různé možnosti a argumenty. Můžete nainstalovat GNU verzi sed s Homebrew pomocí brew install gnu-sed.

spusťte interaktivní terminál!

Základní Použití

sed působí na proud textu, který čte buď z textového souboru nebo ze standardního vstupu (STDIN). To znamená, že můžete odeslat výstup jiného příkazu přímo do sed pro editaci, nebo můžete pracovat na souboru, který jste již vytvořili.,

měli byste si také být vědomi toho, že sed ve výchozím nastavení vysílá vše do standard out (STDOUT). To znamená, že pokud není přesměrován, sed vytiskne svůj výstup na obrazovku místo uložení do souboru.

základní použití je:

  • sed commands

V této lekci, budete používat kopii BSD Licence na Software experimentovat s sed., Na Ubuntu, spusťte následující příkazy kopírovat BSD licenční soubor do svého domovského adresáře, takže můžete pracovat s tím:

  • cd
  • cp /usr/share/common-licenses/BSD .

Pokud nemáte lokální kopii BSD licence, vytvořit sami pomocí tohoto příkazu:

  • cat << 'EOF' > BSD
  • Copyright (c) The Regents of the University of California.
  • All rights reserved.
  • Redistribution and use in source and binary forms, with or without
  • modification, are permitted provided that the following conditions
  • are met:
  • 1. Redistributions of source code must retain the above copyright
  • notice, this list of conditions and the following disclaimer.
  • 2. Redistributions in binary form must reproduce the above copyright
  • notice, this list of conditions and the following disclaimer in the
  • documentation and/or other materials provided with the distribution.
  • 3. Neither the name of the University nor the names of its contributors
  • may be used to endorse or promote products derived from this software
  • without specific prior written permission.
  • THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  • ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  • IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  • ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  • FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  • DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  • OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  • HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  • LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  • OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  • SUCH DAMAGE.
  • EOF

použijme sed chcete-li zobrazit obsah z BSD licenční soubor. sed posílá své výsledky na obrazovce ve výchozím nastavení, což znamená, můžete jej použít jako soubor karet průchodem žádné editační příkazy., Zkuste spustit následující příkaz:

  • sed '' BSD

uvidíte, že BSD licence zobrazí na obrazovce:

Output
Copyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.......

single citáty obsahují editační příkazy můžete projít do sed. V tomto případě jste nic nepředali, takže sed vytiskl každý řádek, který obdržel, na standardní výstup.

sed lze použít spíše standardní vstup než soubor., Potrubí výstup cat příkaz do sed produkovat stejný výsledek:

  • cat BSD | sed ''

uvidíte výstupního souboru:

Output
Copyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.. . .. . .

Jak můžete vidět, můžete pracovat na soubory, nebo proudy textu, jako ty, které vyrábí, když výstupní potrubí s potrubí (|) charakter, stejně snadno.

Tisk Řádků

V předchozím příkladě jste viděli, že input přešel do sed bez operace by vytisknout výsledky přímo na standardní výstup.,

Pojďme se podívat sed‚s explicitní print příkaz, který zadáte pomocí p znak v jednoduchých uvozovkách.

Spustit následující příkaz:

  • sed 'p' BSD

uvidíte, že každý řádek BSD soubor vytištěn dvakrát:

Output
Copyright (c) The Regents of the University of California.Copyright (c) The Regents of the University of California.All rights reserved.All rights reserved.Redistribution and use in source and binary forms, with or withoutRedistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsmodification, are permitted provided that the following conditionsare met:are met:. . .. . .

sed automaticky vytiskne každou řádku ve výchozím nastavení a pak jste to řekl na tiskové linky výslovně s „p“ příkaz, takže si každý řádek vytištěn dvakrát.,

Pokud výstup pečlivě prozkoumáte, uvidíte, že má první řádek dvakrát, následuje druhý řádek dvakrát atd., který vám řekne, že sed pracuje na datové lince po řádku. Čte řádek, pracuje na něm a před opakováním procesu na dalším řádku vydává výsledný text.

můžete vyčistit výsledků, předáním -n možnost sed, který potlačuje automatický tisk:

  • sed -n 'p' BSD
Output
Copyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.. . .. . .

Jsme nyní jsou zpět, aby tisk každý řádek jednou.,

příklady lze zatím jen stěží považovat za úpravy (pokud jste nechtěli vytisknout každý řádek dvakrát…). Dále prozkoumáte, jak sed může upravit výstup cílením na konkrétní části textových dat.

použití adresových rozsahů

adresy umožňují cílit na konkrétní části textového proudu. Můžete zadat konkrétní řádek nebo dokonce řadu řádků.

pojďme sed vytisknout první řádek souboru., Spustit následující příkaz:

  • sed -n '1p' BSD

první řádek vytiskne na obrazovku:

Output
Copyright (c) The Regents of the University of California.

Tím, že umístí číslo 1 „tisk“ příkaz, řekl, sed číslo řádku operovat. Můžete stejně snadno vytisknout pět řádků (nezapomeňte na „-n“):

  • sed -n '1,5p' BSD

uvidíte, že tento výstup:

Output
Copyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditions

právě Jste daný rozsah adres, aby sed., Pokud zadátesed adresu, provede pouze příkazy, které následují na těchto řádcích. V tomto příkladu jste řekl sed, aby vytiskl linku 1 přes linku 5. Mohl jsi uvedeno jinak tím, že první adresu a pak pomocí offset říct, sed, kolik dalších řádků, jak cestovat, jako je tento:

  • sed -n '1,+4p' BSD

To bude mít za následek stejný výstup, protože jsi řekl, sed začít na řádku 1 a pak pracovat na další 4 řádky stejně.,

Pokud chcete vytisknout každý druhý řádek, zadejte interval za znakem~. Následující příkaz vytiskne každý další řádek BSD souboru, počínaje 1. řádek:

  • sed -n '1~2p' BSD

výstup:

Output
Copyright (c) The Regents of the University of California.modification, are permitted provided that the following conditions1. Redistributions of source code must retain the above copyright2. Redistributions in binary form must reproduce the above copyright documentation and/or other materials provided with the distribution. may be used to endorse or promote products derived from this software. . .. . .

můžete použít sed odstranit text z výstupního stejně.,

Mazání Textu

můžete provést odstranění textu, kde jste předtím byli s uvedením tisk textu změnou p příkaz d příkaz.

V tomto případě, budete již potřebovat -n příkaz sed bude tisknout vše, co není odstraněn. To vám pomůže zjistit, co se děje.,

Změnit poslední příkaz z předchozí části, aby to bylo
odstranit každý druhý řádek počínaje prvním:

  • sed '1~2d' BSD

výsledkem je, že vidíte každý řádek jsi nedal, naposledy:

Output
All rights reserved.Redistribution and use in source and binary forms, with or withoutare met: notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer in the3. Neither the name of the University nor the names of its contributors without specific prior written permission.. . .. . .

je důležité si uvědomit, že náš zdrojový soubor není ovlivněn. Je stále neporušená. Úpravy jsou výstupem na naši obrazovku.,

chceme-Li zachránit naše úpravy, můžeme přesměrovat standardní výstup do souboru jako:

  • sed '1~2d' BSD > everyother.txt

otevřít soubor cat:

  • cat everyother.txt

vidíš ten stejný výstup, který jste viděli na obrazovce dříve:

Output
All rights reserved.Redistribution and use in source and binary forms, with or withoutare met: notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer in the3. Neither the name of the University nor the names of its contributors without specific prior written permission.. . .. . .

sed příkaz nepodporuje editaci zdrojového souboru, ve výchozím nastavení, ale můžete změnit toto chování tím, že projde -i možnost, což znamená „provést úpravy v místě.“Tím se změní zdrojový soubor.,

varování: pomocí přepínače-i přepíšete původní soubor, takže byste jej měli používat opatrně. Proveďte operace bez -i přepnout první a potom spusťte příkaz znovu s -i jakmile budete mít to, co chcete, vytvořit zálohu původního souboru, nebo přesměrovat výstup do souboru. Je velmi snadné náhodně změnit původní soubor pomocí přepínače -i.

zkusme to úpravou souboru everyother.txt, který jste právě vytvořili, na místě., Pojďme dále snížit soubor odstraněním každý druhý řádek
znovu:

  • sed -i '1~2d' everyother.txt

Pokud použijete cat zobrazení souboru s cat everyother.txt, uvidíte, že soubor byl upraven.

možnost-i může být nebezpečná. Naštěstí, sed vám dává možnost vytvořit záložní soubor před úpravami.,

Chcete-li vytvořit záložní soubor před editaci, přidat zálohování souboru přímo po „-i“ volbu:

  • sed -i.bak '1~2d' everyother.txt

tím se vytvoří záložní soubor s .bak rozšíření, a pak upraví původní soubor v místě.

dále se podíváte na to, jak používatsed k provádění operací vyhledávání a nahrazování.

nahrazující Text

možná nejznámější použití pro sed nahrazuje text., sed může vyhledávat textové vzory pomocí regulárních výrazů a poté nalezený text nahradit něčím jiným.

o regulárních výrazech se můžete dozvědět více pomocí regulárních výrazů Grep pro vyhledávání textových vzorů v Linuxu.

Ve své nejzákladnější podobě, můžete změnit jedno slovo další slovo pomocí následující syntaxe:

's/old_word/new_word/'

s je náhradní příkaz. Tři lomítka (/) se používají k oddělení různých textových polí., Můžete použít jiné znaky vymezit pole, pokud by to bylo více užitečné.

například pokud jste se snažili změnit název webové stránky, bylo by užitečné použít jiný oddělovač, protože adresy URL obsahují lomítka.

Spustit následující příkaz k tisku URL s echo upravit sed, pomocí podtržení (_) znak jako oddělovač:

  • echo "http://www.example.com/index.html" | sed 's_com/index_org/home_'

Tento nahradil com/index org/home., Výstup ukazuje, že upravená URL:

Output

Do not forget the final delimiter, or sed will complain. If you ran this command:

  • echo "http://www.example.com/index.html" | sed 's_com/index_org/home'

měli Byste vidět výstup:

Output
sed: -e expression #1, char 20: unterminated `s' command

Pojďme vytvořit nový soubor do praxe některé substituce. Spusťte následující příkaz vytvořit nový textový soubor s názvem song.txt:

  • echo "this is the song that never ends
  • yes, it goes on and on, my friend
  • some people started singing it
  • not knowing what it was
  • and they'll continue singing it forever
  • just because..." > song.txt

Teď pojďme nahradit výraz on forward. Zadejte následující příkaz:

  • sed 's/on/forward/' song.txt

výstup vypadá takto:

Output
this is the sforwardg that never endsyes, it goes forward and on, my friendsome people started singing itnot knowing what it wasand they'll cforwardtinue singing it foreverjust because...

můžete se podívat na několik pozoruhodných věcí., Za prvé, je to sed nahrazené vzory, nikoli slova. on v song se změní na forward.

další věc, kterou musíte vědět je, že on-line 2, druhý on změnit na forward.

je to proto, že ve výchozím nastavení příkaz s pracuje na prvním zápase v řádku a poté se přesune na další řádek., Chcete-li sed nahradit každou instanci on místo prvního na každém řádku musíte nahradit volitelný příznak.

Poskytnout g vlajky na náhradu příkaz tím, že po substituci sada:

  • sed 's/on/forward/g' song.txt

uvidíte, že tento výstup:

Output
this is the sforwardg that never endsyes, it goes forward and forward, my friendsome people started singing itnot knowing what it wasand they'll cforwardtinue singing it foreverjust because...

nahradit příkaz změní pokaždé.,

Pokud jste pouze chtěli změnit druhého stupně, „na“, že sed najde na každém řádku, pak byste měli použít číslo 2 místo g:

  • sed 's/on/forward/2' song.txt

Tento čas ostatní řádky se nemění, protože nemají druhém výskytu:

Output
this is the song that never endsyes, it goes on and forward, my friendsome people started singing itnot knowing what it wasand they'll continue singing it foreverjust because...

Pokud si jen chcete vidět, které řádky byly nahrazeny, použijte -n možnost znovu potlačit automatický tisk.,

možnost p pak můžete předat náhradnímu příkazu k tisku řádků, kde došlo k substituci.

  • sed -n 's/on/forward/2p' song.txt

řádek, který změnil otisky obrazovky:

Output
yes, it goes on and forward, my friend

Jak vidíte, můžete kombinovat vlajek na konci příkazu.

Pokud chcete, aby proces vyhledávání ignoroval případ, můžete mu předat příznak „i“.,

  • sed 's/SINGING/saying/i' song.txt

výstup:

Output
this is the song that never endsyes, it goes on and on, my friendsome people started saying itnot knowing what it wasand they'll continue saying it foreverjust because...

Výměna a Odkazování na odpovídající Text

Pokud chcete najít více složité vzory s regulárními výrazy, máte řadu různých metod odkazování na odpovídající vzor v na náhradní text.,

například, zápas od začátku řádku do at, použijte následující příkaz:

  • sed 's/^.*at/REPLACED/' song.txt

uvidíte, že tento výstup:

Output
REPLACED never endsyes, it goes on and on, my friendsome people started singing itREPLACED it wasand they'll continue singing it foreverjust because...

můžete vidět, že výraz se zástupnými znaky zápasy od začátku řádku poslední instance at.

Protože nevíte, přesnou frázi, která bude odpovídat ve vyhledávací řetězec, můžete použít & znak reprezentující odpovídající text v náhradní řetězec.,

Pojďme dát závorky kolem uzavřeno text:

  • sed 's/^.*at/(&)/' song.txt

uvidíte, že tento výstup:

Output
(this is the song that) never endsyes, it goes on and on, my friendsome people started singing it(not knowing what) it wasand they'll continue singing it foreverjust because...

více flexibilní způsob odkazování na odpovídající text, je použít utekl závorky do skupiny úseky odpovídající text.

každá skupina vyhledávacího textu označená závorkami může být odkazována uniklým referenčním číslem. Například, první závorky skupina může být odkazoval se na s \1 druhý \2, a tak dále.,

V tomto příkladu, budeme přepínat první dvě slova každého řádku:

  • sed 's/\(*\) \(*\)/\2 \1/' song.txt

uvidíte, že tento výstup:

Output
is this the song that never endsyes, goes it on and on, my friendpeople some started singing itknowing not what it wasthey and'll continue singing it foreverbecause just...

Jak můžete vidět, výsledky nejsou ideální. Například druhý řádek přeskočí první slovo, protože má znak, který není uveden v naší znakové sadě. Podobně zacházelo s they'll jako se dvěma slovy v pátém řádku.

Pojďme zlepšit regulární výraz, aby to bylo přesnější:

  • sed 's/\(*\) \(*\)/\2 \1/' song.txt

uvidíte, že tento výstup:

Output
is this the song that never endsit yes, goes on and on, my friendpeople some started singing itknowing not what it wasthey'll and continue singing it foreverbecause... just

je To mnohem lepší, než minule., Toto seskupuje interpunkci s přidruženým slovem.

Všimněte si, jak opakujeme výraz uvnitř závorek (jednou bez znaku * a poté jednou s ním). Je to proto, že znak * odpovídá znakové sadě, která přichází před nulou nebo vícekrát. To znamená, že zápas s divokou kartou by byl považován za“ zápas“, i když vzor není nalezen.

zajistit, Aby sed najde text alespoň jednou, ty se musí shodovat to jednou bez zástupných před upotřebením zástupný.,

závěr

v tomto tutoriálu jste prozkoumali příkaz sed. Vytiskli jste konkrétní řádky ze souboru, hledali text, smazali řádky, přepsali původní soubor a použili regulární výrazy k nahrazení textu. Měli byste být schopni vidět, jak můžete rychle transformovat textový dokument pomocí správně konstruovaných příkazů sed.

V dalším článku v této sérii prozkoumáte některé pokročilejší funkce.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *