Portál AbcLinuxu, 5. května 2025 15:20

Dotaz: Jak na pevnou šířku v bashi

7.8.2012 19:19 MM
Jak na pevnou šířku v bashi
Přečteno: 324×
Odpovědět | Admin
Jak můžu docílit něčeho takového?

funkce která má pevnou šířku
function prints {
 echo -en "[ $1                                                                ]"
}
mám texty o různých delkách
prints "dasdsadas  sa a asd as dasd a d"
výstup z příkazu
prints "dasad a dd aadasd a d"
výstup z příkazu
prints "dasassasd a dadddd asdaasd a asasd f fdxgh dhdfghadasd a d"
výstup z příkazu
a výsledek je pak
[ dasdsadas  sa a asd as dasd a d                                   ]
výstup z příkazu
[ dasad a dd aadasd a d                                             ]
výstup z příkazu
[ dasassasd a dadddd asdaasd a asasd f fdxgh dhdfghadasd a d        ]
výstup z příkazu
jenže následující text je na novém řádku a ne na konci, poztřebuji to takto, poradí někdo? Pokud to jde tak mimo použití cyklů s počítáním znaků a doplnováním mezer. ;-) Díky
[ dasdsadas  sa a asd as dasd a d                                   ] výstup z příkazu
[ dasad a dd aadasd a d                                             ] výstup z příkazu
[ dasassasd a dadddd asdaasd a asasd f fdxgh dhdfghadasd a d        ] výstup z příkazu

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.8.2012 19:24 Sten
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
man console_codes sekce ECMA-48 CSI sequences
7.8.2012 19:25 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
printf
7.8.2012 19:29 Kit
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použij program printf.
printf "[ %-60s ] " "dasad a dd aadasd a d"
7.8.2012 19:47 MM
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Nemůžu použít printf :-( výpisy jsou barevně označené, což mi printf neoumožní...
7.8.2012 19:56 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Proč ne? Cokoli protlačíte přes echo, protlačíte i přes printf (a často snáze).
7.8.2012 20:00 MM
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi

Aha, to mi nějak ušlo, vím, že jsem to kdysi zkoušel ale nešlo to.. tak to je fajn ;-)

7.8.2012 19:58 Kit
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
To si děláš srandu nebo s ním prostě neumíš?
7.8.2012 20:01 MM
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
nn, fakt mi to nešlo, ale jak to myslíš s tím číslem uvnitř? To si pro každý řádek nastavit podle počtu znaků v řetězci vypočítat jiné?
7.8.2012 20:05 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Chcete-li něco zarovnat na pevnou šířku, tak musíte vědět na jakou. Nebo si očekáváte, že příkaz nějakou černou magií nastaví šířku podle parametrů následujících příkazů (které se ještě neprováděly)?
7.8.2012 20:10 MM
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Ale to není vůbec pravda co píšete... navíc nevím co s tím mám společného nějaký příkaz ;-)
7.8.2012 20:13 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Tak podle čeho by se podle vás ta šířka měla určit, pokud ji nechcete zadat?
7.8.2012 20:23 MM
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Podle ničeho, třeba takto, pokud naplníte proměnnou AAA čímkoliv kratším než je první řádek s echem tak bude vždy znak "]" zarovnaný vpravo a nikde nic nepočítám ... jenže potřebujiá nasledujiící řádek vypsat za ten znak "]" a ne na nový řádek, nehledejme v tom nic slozitého ;)
AAA="aaa sd d ada dad adadsas"

echo -en "\r                                                                   ]"
echo -e "\r[ $AAA"
7.8.2012 20:33 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Začínám mít temné podezření, že jste se neobtěžoval si ani přečíst, co ten příkaz dělá, ale dokonce si to ani vyzkoušet.
7.8.2012 21:56 MM
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Ale obtěžoval, ale je to nepoužitelný, jelikož to vyhodnocuje jinak znaky s diakritikou jak bez ní :-( Což moc nechápu ale je to tak..
8.8.2012 01:43 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi

Hm, zdá se, že printf ignoruje locales. V tom případě třeba nějak takhle:

function align
{
    local s="$1"
    local w="$2"

    if [ "${#1}" -le "$w" ]; then
        printf "%s%*s" "$s" $[w-${#s}] ""
    else
        echo -n "${s:0:$w}"
    fi
}

Příště zkuste psát své příspěvky trochu srozumitelněji a hlavně konkrétněji. Z věty

To si pro každý řádek nastavit podle počtu znaků v řetězci vypočítat jiné?

by asi jen velmi zkušený jasnovidec poznal, že máte na mysli problémy se zarovnáním na předepsanou šířku, pokud řetězec obsahuje znaky s diakritikou…

8.8.2012 11:50 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Jsi dobrej, já vůbec nepochopil o co mu jde, myslel jsem, že o to, aby "výstup z příkazu" nebyl na novém řádku. A to by býval byl stejně nebyl. Přestože ve svém dotazu to tvrdí a označuje za problém k řešení. To s tou pevnou šířkou jsem naopak myslel, že má vyřešené, když říká "výstup vypadá takto (zarovnáno), ale já potřebuji..." :)
8.8.2012 12:46 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
No, já to taky pochopil až z toho příspěvku z 21:56, do té doby jsem měl jen několik divokých teorií. Tahle mezi nimi nebyla…
8.8.2012 20:20 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Jak na pevnou šířku v bashi
Hm, zdá se, že printf ignoruje locales.

To je vlastnost printf(3):

  • An optional minimum field width. If the converted value has fewer bytes than the field width, …

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.