Vinnaren i pepparkakshustävlingen!
2017-04-10, 16:41
  #1
Medlem
Bleppe_Bfs avatar
Har output från ett script där raderna ser ut som följer.

Kod:
 (17219,0,0)  #430000  srgb(67,0,0)
Eller
Kod:
(0,0,35723)  #00008B  DarkBlue

Har ett annat program som tar srgb-värden men endast i följande format.

Kod:
[48;2;%d;%d;%dm

Hur grepar jag endast efter värdena i srgb() och skriver ut dem i rätt format?

Testade att grepa värden inom brackets, men då får jag samtliga värden.

Kod:
grep -oP '(?<=\()[^\)]+'

Då raderna är olika långa ser jag ingen bra metod att köra awk eller sed på varesig början eller slutet.

Ännu knepigare blir det att göra en ersättningstabell för html-färgkoderna red green blue osv.

Borde jag använda hexkoden som utgångspunkt istället, och konvertera den till srgb då den inte byter format?

edit: Kan extrahera endast hexvärden om jag kör:

Kod:
grep -o '#.*'  |  sed 's/\s.*$//'

Då återstår problemet att gå ifrån hex till srgb och att få dem i rätt format...
__________________
Senast redigerad av Bleppe_Bf 2017-04-10 kl. 17:10.
Citera
2017-04-10, 19:10
  #2
Medlem
Bleppe_Bfs avatar
Konverterade hexvärdena till RGB med följande script och följde notationen.

Tog först bort första tecknet med
Kod:
 cat hex.txt | cut -d 2 > barahex.txt

Kod:
#!/bin/bash

for i in $(cat barahex.txt); do
hexinput=`echo $i | tr '[:lower:]' '[:upper:]'`  # uppercase-ing
a=`echo $hexinput | cut -c-2`
b=`echo $hexinput | cut -c3-4`
c=`echo $hexinput | cut -c5-6`

r=`echo "ibase=16; $a" | bc`
g=`echo "ibase=16; $b" | bc`
b=`echo "ibase=16; $c" | bc`

echo $"[48;2;"$r$";"$g$";"$b$"m"
done

Därefter
Kod:
awk -v n=330 '1; NR % n == 0 {print ""}' | tr '\n' ' '

För att få radbyte på rätt plats.

Pastebin krävde betalt för filer på över 500k.

Lade upp ett proof of concept på minfil.
Självklart skall inte alla filer vara jättestora, men den här ser ju cool ut och har en massa färger iaf.

https://minfil.org/U79a0bb8b4/ormascii.txt

Bara att köra cat på den så skall den skrivas ut i 24 bitars färg i din terminal. Om sessionen inte är 330 tecken bred eller större kan den bli förvrängd i sidled. Justera i sidled eller zooma ut så skall den se rätt ut till slut. I UXterm och Terminator måste sessionen vara exakt 330/331 tecken bred för att den skall visas upp rätt.

Denna serie fulhack ger dock ett i min mening ett bättre resultat än t.ex libcaca.

http://caca.zoy.org/static/images/stitch-80x45.png
https://i.ytimg.com/vi/-h8g5NGUbDM/maxresdefault.jpg

Hur krymper jag ned processen till någonting mer hanterbart?

edit: ser att Flashback inte får med escape-tecknet som pixlarna inleds med.
Den finns såklart kvar i textfilen.
__________________
Senast redigerad av Bleppe_Bf 2017-04-10 kl. 19:24.
Citera
2017-04-10, 21:05
  #3
Medlem
S.Y-Sophies avatar
Citat:
Ursprungligen postat av Bleppe_Bf
Har output från ett script där raderna ser ut som följer.

Kod:
 (17219,0,0)  #430000  srgb(67,0,0)

Hur grepar jag endast efter värdena i srgb() och skriver ut dem i rätt format?

Kod:
grep -Eo '[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}' | tail -1 
Skulle returnera 67,0,0 är detta vad du skall grepa?
__________________
Senast redigerad av S.Y-Sophie 2017-04-10 kl. 21:07.
Citera
2017-04-10, 22:29
  #4
Medlem
Bleppe_Bfs avatar
Citat:
Ursprungligen postat av S.Y-Sophie
Kod:
grep -Eo '[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}' | tail -1 
Skulle returnera 67,0,0 är detta vad du skall grepa?

Egentligen ja. Dock returneras alla värden som har ett html-namn som det namnet istället för srgb värden, så jag gick direkt på hexvärdena istället. Kolla andra inlägget.

Har även ett fungerande proof of concept hos minfil som visar att det jag vill åstakomma fungerar efter mycket bashbrottning.

Det är en serie mellanslag med olika bakgrundsfärg.

Om jag inte stoppar in newline tecknet "" så kommer allt man skriver i terminalen från den punkten att ha den bakgrundsfärgen. Tolkar det som att den sätter alla värden till 0.

Infilerna måste ha ett bildförhållande på 2:1, alltså reducera höjden med 50%, då bokstäver perceptuellt är två pixlar höga.
__________________
Senast redigerad av Bleppe_Bf 2017-04-10 kl. 22:55.
Citera
2017-05-19, 19:25
  #5
Medlem
hashs avatar
Citat:
Ursprungligen postat av Bleppe_Bf
Hur grepar jag endast efter värdena i srgb() och skriver ut dem i rätt format?


sed -e 's/^.*srgb.*(//' -e 's/)//'
Citera
2017-05-19, 19:53
  #6
Medlem
Bleppe_Bfs avatar
Citat:
Ursprungligen postat av hash
sed -e 's/^.*srgb.*(//' -e 's/)//'

Testkör mitt proof of concept och se om det fungerar för dig.
Kör cat på textfilen jag hänvisar till längre upp i en terminalsession som är 330 tecken bred.

Om du zoomar ut först så behöver den inte bli så fasligt stor.

https://www.flashback.org/leave.php?...2Formascii.txt
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback