Tänä aamuna sain aikaan vain virheitä. Lopulta kokeilin sangen alkeita ja annoin käskyn: echo "alkuluku" | grep ARKISTO  
joka ei tulosta mitään mutta ei myöskään päädy virheeseen. Vaan nytpä päätyi ja allapäin mietin että näinköhän se dementia alkaa ja aloin katsella telkkaria. Mutta filmin jälkeen aloin ajatella että käskyssä täytyy olla joku näkymätön merkki. Hain tuon käskyn päätteen historiasta ja muutin sitä hieman muotoon:

echo 'echo "alkuluku" | grep ARKISTO' | od -c 

ja tuloste olikin:
0000000   e   c   h   o       "   a   l   k   u   l   u   k   u   "    
0000020   |       g   r   e   p 302 240   A   R   K   I   S   T   O  \n
- merkki 302 240 on merkitykseltään "välilyönti joka ei jaa sanoja" ja se syntyy kun painaa alt-gr ja välilyönti. Suomi-näppiksen erikoisuus kuulemma.
- käsky puree tiedostoihin tällätavoin: cat tiedosto | od -c



BASH-skripteissä voi olla tulosteissa ja editoreissa näkymättömiä kontrollimerkkejä jotka saattavat tehdä skriptistä toimimattoman. 
- pelkäänpä muuten tämän koskevan muitakin kieliä.

Varsinaisten kontrollimerkit ovat ascii-koodeiltaan välillä 00-1f hexadesimaalisina ja niiden "BASH-merkintä" on välillä \x00-\x1f.
osan kontrollimerkeistä voi poistaa tiedostosta käskyllä: for i in {01..19} 0b 0c 0d 0e 0f 1a 1b 1c 1d 1f; do apu='\x'$i; sed -i "s/${apu}//g" tiedostonnimi; done
kokeile: echo -e '#\x1d!/bin/bash\x01 koe\x0atoinen\x0d rivi' > delme; cat -v delme;  for i in {01..19} 0b 0c 0d 0e 0f 1a 1b 1c 1d 1e 1f; do apu='\x'$i; sed -i "s/${apu}//g" delme; done; cat -v delme
- kontrollimerkki \x00 on kielletty, se on kuulemma sed-sääntöjen vastainen 
-| tr -d [:cntrl:] # olisi teoriassa loistava, mutta se vie mennessään myös rivinvaihdot, skripti ei sen jälkeen toimisi
- jotkut kontrollimerkit ovat yleensä tarpeellisia ja jotkut kontrollimerkit ovat lähes aina tarpeettomia. Ascii-taulu auttaa.

Mitä enemmän tuota kontrollimerkki-ongelmaa tutkin niin sitä enemmän alkaa tuntua siltä, että vian nimi on hiukan väärin sillä eivät ne invalidisoivat merkit 
ole varsinaisesti kontrollimerkkejä vaan editorien lisäämiä "kontrolli-merkkejä" jotka yleensä alkavat: M- tai C-

- kontrolli-merkkien metsästämiseen sopii parhaiten käsky: cat -v skriptitiedostonNimi 
- tai jos etsii kontrollimerkkejä tekstijonosta löytää ne käskyllä: echo "tekstijono" | cat -v
- jos skriptin listaus olisi muuten kovin pitkä voi sitä rajoittaa: cat -v skriptitiedostonNimi | tr -d äÄöÖåÅ | grep M-   . Se selventää muutenkin, sillä ääkkösissä on aina mukana "kontrollimerkkejä".
- yksi keino on:  cat tiedosto | sed 's/[[:cntrl:]]/\!\!\!\!\!\!/'






loppu koetta
väärä osan kontrollimerkeistä voi poistaa tiedostosta käskyllä: for i in {01..19} 22 24 25 26 27 28 29 30 31; do apu='\x'$i; sed -i "s/${apu}//g" tiedostonnimi; done
väärä kokeile: echo -n '#!/bin/bash koe' > delme; echo -e "\x01" >> delme; cat -v delme;  for i in {01..19} 22 24 25 26 27 28 29 30 31; do apu='\x'$i; sed -i "s/${apu}//g" delme; done; cat -v delme

ei toimi elikä toimii jossain muussa: yksi käsky kontrollimerkkien poistamiseksi: cat /home/petteri/OMATSKRIPTIT/Skriptiajuri | egrep -v “[[:cntrl:]]“
ei toimi; tr -d $'\x00-\x1f' < input.file > output.file 

osan kontrollimerkeistä voi poistaa tiedostosta käskyllä: for i in {01..1f}; do apu='\x'$i; sed -i "s/${apu}//g" tiedostonnimi; done 
kokeile: echo -e '#!/bin/bash\x01 koe\x02' > delme; cat -v delme;  tr -d $'\x00-\x1f' < delme > koe; cat -v koe          
echo -e '#!/bin/bash\x01 koe\x0e' > delme; cat -v delme;  cat delme | egrep -v “[[:cntrl:]]“

 echo -e '#!/bin/bash\x01 koe\x0atoinen\x0d rivi' > delme; cat -v delme;  for i in {01..19} 0b 0c 0d 0e 0f 1a 1b 1c 1d 1e 1f; do apu='\x'$i; sed -i "s/${apu}//g" delme; done; cat -v delme
 echo -e '#!/bin/bash\x01 koe\x0atoinen\x0d rivi' > delme; cat -v delme;  for i in 01 02 03 04 05 06 07 08 09 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f; do apu='\x'$i; sed -i "s/${apu}//g" delme; done; cat -v delme # paras tähänasti

- tai käyttäen sediä: sed -i s/{ctrl+v}{ctrl+m}// filename -> sed 's/\r//'  sed 's/{ctrl+v}{ctrl+m}//g' tiedosto
- od -An -tx1 tiedosto
echo -n '#!/bin/bash koeä' > delme; echo -e "\x01" >> delme; od -c delme | awk '{$1=" "; sub(" ", ""); print'} | grep [0-9][0-9][0-9]

The control characters in ASCII still in common use include:

    0 (null, NUL, \0, ^@), originally intended to be an ignored character, but now used by many programming languages to mark the end of a string.
    7 (bell, BEL, \a, ^G), which may cause the device receiving it to emit a warning of some kind (usually audible).
    8 (backspace, BS, \b, ^H), used either to erase the last character printed or to overprint it.
    9 (horizontal tab, HT, \t, ^I), moves the printing position some spaces to the right.
    10 (line feed, LF, \n, ^J), used as the end of line marker in most UNIX systems and variants.
    12 (form feed, FF, \f, ^L), to cause a printer to eject paper to the top of the next page, or a video terminal to clear the screen.
    13 (carriage return, CR, \r, ^M), used as the end of line marker in Mac OS, OS-9, FLEX (and variants). A carriage return/line feed pair is used by CP/M-80 and its derivatives including DOS and Windows, and by Application Layer protocols such as HTTP.
    27 (escape, ESC, \e [GCC only], ^[).
    127 (delete, DEL, ^?), originally intended to be an ignored character, but now used in some systems to erase a character. Also used by some Plan9 console programs to send an interrupt note to the current process.

- ohjelma ei toimi ilman että oikeissa paikoissa on kontrollimerkkejä, esimerkiksi ohjelma-rivin lopussa täytyy olla rivinsiirto-merkki (LF, \n, ^J).
- kontrollimerkit saattavat myös olla muutenkin haluttuja, esimerkiksi ohjelmassa saattaa olla kellonsoitto-merkki (BEL, \a, ^G) jotta kone antaisi äänimerkin saavutettuaan ohjelmassa sen kohdan.  
- color-codes
- BOM -> poistaminen: awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' text.txt 
- LRM -> kirjoitetaan vasemmalta oikealle,  UTF-8:lla se on E2 80 8E
- RLM -> kirjoitetaan oikealta vasemmalle, UTF-8:lla se on E2 80 8F
