![]() |
Oefening met de VI tekstverwerker
Hallo allemaal,
Iemand die hiermee kan helpen? Probeer de letters van het woord “COMPUTERGEBRUIK” alfabetisch te rangschikken, zonder daarbij manueel letters te verplaatsen. Je moet dus vi het werk laten doen door gebruik te maken van (een viertal) commando’s. Tip: Ga na wat de volgende commando’s doen: :1,$ !sort :1,$j! Alvast bedankt! |
Ik weet niet wat dat !sort commando doet, maar ik neem aan dat dat de opgegeven regels alfabetisch sorteert.
In dat geval zul je dus eerst elke letter moeten vervangen door letter + regeleinde, vervolgens de regels sorteren, en tenslotte die regeleindes weer verwijderen. Maar dat werkt natuurlijk alleen, indien dat woord het enige is wat in het bestand staat... |
Citaat:
Bedankt voor je antwoord, en sorry dat ik maar zo laat kan reply'en. Dit woord is inderdaad het enige in dit bestand. Dat ik elke letter moet vervangen door letter + regeleinde had ik ook al gevonden, maar dit commando is juist mijn probleem, weet namelijk niet direct hoe ik dit kan doen. Dat !sort commando sorteert alles inderdaad alfabetisch. Alvast bedankt! |
De code voor Regeleinde zou ik zo gauw niet weten.
Hangt ook af van je besturingssysteem. Voor een EBCDIC-bestand is het in ieder geval 0D 25. Voor een ASCII-bestand uit een DOS-omgeving (zoals Windows) is het 0D 0A. Voor een ASCII-bestand uit een UNIX-omgeving is het ofwel 0D, ofwel 0A. DIt weet ik zo gauw niet uit mijn hoofd, maar dat kun je vast wel googelen. |
Citaat:
- Een willekeurige letter geef je in een zoekstring aan met een punt ( "." ). - Een regeleinde geef je in een zoekstring aan met backslash + n ( "\n" ). ----- Je zou het volgende eens kunnen proberen: s/\(.\)/\1\n\ De . staat voor een willekeurig character. De \( en \) zorgen er (hopelijk) voor dat we later naar die letter kunnen refereren. De \1 haalt (hopelijk) het eerder gevonden willekeurige character terug. De \n plakt er een regeleinde achteraan. Ik heb op dit moment geen vi bij de hand, dus ik kan het niet testen... |
Werkt niet op vi in een AIX 4.4 environment.
|
Alvast bedankt voor de hulp!
Als ik jouw suggestie probeer krijg ik het volgende: CnOMPUTERGEBRUIK. Groeten, |
Probeer in plaats van \n eens:
Control+V <Enter> (maar dan zonder de spatie er tussen: Ziet er waarschijnlijk uit als ^M ) En dan moeten we nog een manier verzinnen om dit voor *alle* voorkomens te doen, niet alleen voor de eerste... |
s/\(.\)/\1^M/g
Waarbij je ^M weer moet intikken als "Control-V" "Enter" . |
Ik krijg:
BCEEGIKMOPRRTUU ------------ Nu nog bedenken, waar we dat vierde commando voor nodig hebben. |
Code:
%s/./&^M/g |
Citaat:
Die eerste regel ziet er een heel stuk overzichtelijker uit dan de mijne! Een grote stap vooruit, dus. Maar wat doet die vierde regel? Bij mij had ik het eindresultaat (in vi) al na 3 commando's. Wat doe ik fout? |
Citaat:
Pattern not found: \ Maar dat is op linux, niet op Unix. |
Na het verwijderen van de newlines in regel 3 staan er spaties tussen de letters. Die spaties verwijder ik in die laatste regel.
Edit: Vreemd. Nu krijg ik inderdaad ook het correcte resultaat na stap 3. |
Citaat:
Alvast bedankt voor al jullie hulp! Ik blijf ook verder zoeken, en laat het weten als ik een oplossing vindt! |
Het antwoord gevonden:
s/./&^M/g |
Alle tijden zijn GMT +1. Het is nu 05:53. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.