GNU/Linux >> Znalost Linux >  >> Linux

Jak fungují volby '-s', '-t' a '-c' příkazu tr v Unixu?

-s Switch:Squeeze (odstranění opakujících se znaků)

echo i am a good boy | tr -s good bad

výstup:i am a bd bdy

V zákulisí se dějí dvě věci, které to umožňují. Za prvé, pokud je druhý argument na tr je kratší než první než poslední znak ve 2. argumentu se opakuje, aby měl stejnou délku jako první. Ekvivalentní příkaz je tedy:

echo i am a good boy | tr -s good badd

Další věc, která se děje, je, že když se znaky v prvním argumentu opakují, přepisují jakýkoli předchozí výskyt (mám na mysli dva oo s v good ). Díky tomu je příkaz nyní ekvivalentní:

echo i am a good boy | tr -s god bdd

(druhý od nahrazení přepíše předchozí o na a výměna, čímž se stává nadbytečným)

Bez -s přepnout výstup by byl

i am a bddd bdy

S -s přepínač tr „zmáčkne“ všechny opakované znaky, které jsou uvedeny v posledním argument opouštějící konečný výstup:

i am a bd bdy

-c Switch:Complement

-c přepínač se používá ke shodě doplňku prvního argumentu (tj. všech znaků, které nejsou uvedeny v argumentu 1). Výsledkem je, že arg 1 bude obsahovat mnoho písmen (256-3). Nyní se s argumentem 2 stane totéž jako v předchozím případě:konečný znak Arg 2 se opakuje, aby odpovídal délce nebo Arg 1. Takže původní tvrzení:

echo i am a good boy | tr -c good bad

je ekvivalentní:

echo i am a good boy | tr abcefhijklmnp... baddddddddddd...

(všimněte si chybějícího g , o a d v první sadě si také všimněte, že d nahradí každý další znak v druhé sadě -- včetně znaku mezery)

To je důvod, proč i am a good boy změní na dddddddgoodddodd

Více informací zde:http://www.linuxjournal.com/article/2563


Vaše porozumění -s je nesprávný, nahradí opakované výskyty znaků v sadě 1 na vstupu jediným znakem. nemodifikuje sadu, např.

echo i am a good boy | tr -s god bad

dává

i am a bad bay

-c volba nahradí sadu 1 jejím doplňkem (tj. množinou všech znaků, které nejsou obsaženy v sadě 1). Můžete to použít například k odstranění všech znaků kromě specifikovaných.

echo i am a good boy | tr -cd gobdy

výstupy

goodboy

Linux
  1. Jak používat příkaz basename?

  2. Účel .bashrc a jak to funguje?

  3. Vysvětlete možnosti příkazu Readlink?

  1. Jak vytvořit alias a používat příkaz Alias ​​v Linuxu

  2. Příkaz Linux AWK – Příklady syntaxe použití Linuxu a Unixu

  3. Jak nainstalovat a používat příkaz Ping v Linuxu

  1. Jak si zapamatovat možnosti příkazů?

  2. Jak funguje příkaz Exit na Unixovém terminálu?

  3. Jak komprimovat a extrahovat soubory pomocí příkazu tar v systému Linux?