GNU/Linux >> Znalost Linux >  >> Linux

Získat všechny možné kombinace slova malými/velkými písmeny?

Chci napsat bash skript pro tisk všech možných malých a velkých permutací určitého slova, např. harley:

harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY

Mým naivním řešením je napsat n-tou (n je len(slovo)) vnořenou for-loop pro toto konkrétní slovo:

#!/bin/bash
for a in {h,H}; do
    for b in {a,A}; do
    ...
    done
done

Musel bych však skript znovu nakódovat pro jiné slovo.

Existuje lepší způsob, jak toho dosáhnout?

Přijatá odpověď:

Trochu lepší řešení:

echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}

Pro plnou škálovatelnost:

echo harley \
| perl -nle 'print "echo ",
                    join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"

Pokud absolutně musíte mít jedno slovo na řádek, použijte

for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done

díky komentáři mattdm

Odpovídající škálovatelná verze by byla:

echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'

Pro zábavu zkuste nahradit „harley“ za „supercalifragilisticexpialidocious“ Uplynulo 5 minut a můj počítač stále chroupe a pravděpodobně nikdy nedokončí 🙂


Linux
  1. Převést veškerý text z velkých na malá písmena a naopak?

  2. Linux:Jak získat všechny přihlašovací protokoly ze systému?

  3. Znovu spustit skript, pokud je vstup Ano?

  1. Je možné získat postavu na terminálovém kurzoru pomocí únikových kódů Ansi?

  2. Získat seřazený počet výskytů slov v textovém souboru všech slov a tiskový výstup?

  3. Jak nahradit všechny výskyty slova ve všech souborech v příkazovém řádku Linuxu

  1. Jak změnit všechny výskyty slova ve všech souborech v adresáři

  2. Získejte poslední 4 znaky výstupu ze standardního výstupu

  3. Je možné nainstalovat všechny balíčky z repozitáře APT?