[Ubu 12.04 server] Vanaf CLI tekstbestand editten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Een paar bestanden staan op mijn server als sjabloon. Als ik een nieuwe website aanmaak, hoef ik maar een paar variabelen te veranderen. Hoe kun je een string veranderen vanaf de CLI? Uiteraard nadat het bestand gekopieerd is ;-), en uiteraard niet vanuit gedit of vi (tenzij het automagisch kan).

Uiteindelijk maak ik via Autohotkey een opdracht waarbij een popupvenster om de variabelen vraagt. Dat werkt allemaal, alleen dit laatste niet ..

==
hoi


Acties:
  • 0 Henk 'm!

  • Kul
  • Registratie: Oktober 2005
  • Laatst online: 28-12-2024

Kul

Gedit gaat niet werken omdat je niet in een (grafische) Xorg omgeving zit, maar waarom zou vi niet werken, dat is toch gewoon een cli-based text editor?

Ik gebruik zelf altijd nano, een simpele cli-based text editor.

Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 06:07

Kettrick

Rantmeister!

Als je het in een script wil doen zou ik even naar sed kijken :)

Acties:
  • 0 Henk 'm!

  • ISaFeeliN
  • Registratie: November 2005
  • Laatst online: 16-09 08:06
root@server:/etc/scripts# cat test.sh
echo "WARNING - /usr/bin/mailq not found!"

root@server:/etc/scripts# ./test.sh
WARNING - /usr/bin/mailq not found!

root@server:/etc/scripts# sed -i -e 's/WARNING/ERROR/g' test.sh

root@server:/etc/scripts# ./test.sh
ERROR - /usr/bin/mailq not found!

root@server:/etc/scripts# cat test.sh
echo "ERROR - /usr/bin/mailq not found!"

Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Kul schreef op dinsdag 23 juli 2013 @ 15:26:
Gedit gaat niet werken omdat je niet in een (grafische) Xorg omgeving zit, maar waarom zou vi niet werken, dat is toch gewoon een cli-based text editor?

Ik gebruik zelf altijd nano, een simpele cli-based text editor.
Lol, Gedit :P |:( Natuurlijk bedoel ik nano.

Maar thanks voor de tip van sed. Die kende ik nog niet.

==
hoi


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:26

Hero of Time

Moderator LNX

There is only one Legend

In vi(m) voer je dan dit uit:
:s/oud/nieuw/g

Als het op meerdere plaatsen moet, gebruik je :%s, zo even uit 't hoofd.

In het hierboven genoemde sed voorbeeld is -e niet echt nodig. Zie de man-page:
-e script, --expression-script
add the script to the commands to be executed
Er is geen script om uit te voeren. Ik gebruik sed in een paar scripts en heb alleen "sed -i 's/blaat/schaap/g' bestand".

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

Verwijderd

Kul schreef op dinsdag 23 juli 2013 @ 15:26:
Gedit gaat niet werken omdat je niet in een (grafische) Xorg omgeving zit, maar waarom zou vi niet werken, dat is toch gewoon een cli-based text editor?

Ik gebruik zelf altijd nano, een simpele cli-based text editor.
Dit dus. Mijn voorkeur gaat ook uit naar nano. Erg eenvoudig en intuitief. Als je geen lastige aanpassingen hoeft te doen, dan is dit zeker een aanrader.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:26

Hero of Time

Moderator LNX

There is only one Legend

Ik ben begonnen met nano, simpelweg omdat het direct in edit mode staat. Ideaal. Later ga je wel eens kijken naar krachtigere editors, zoals vim. Als je eenmaal vim gewend bent, wil je eigenlijk geen nano meer gebruiken.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • ihre
  • Registratie: Juni 2004
  • Laatst online: 12-02 09:36
Je kunt met sed ook meerdere bestanden in 1 keer aanpassen:

code:
1
2
3
4
5
6
7
8
9
root@1:~# mkdir test                                                                                                                 
root@1:~# cd test                                                                                                                    
root@1:~/test# touch 1 2                                                                                                              
root@1:~/test# echo lol > 1
root@1:~/test# echo lol > 2                                                                        
root@1:~/test# sed -i s/lol/kaas/ *                                                                                                  
root@1:~/test# cat 1 2                                                                                                                
kaas
kaas
Hero of Time schreef op dinsdag 23 juli 2013 @ 16:26:
Ik ben begonnen met nano, simpelweg omdat het direct in edit mode staat. Ideaal. Later ga je wel eens kijken naar krachtigere editors, zoals vim. Als je eenmaal vim gewend bent, wil je eigenlijk geen nano meer gebruiken.
Ik ben met vi begonnen, en kwam toen vim tegen, een verademing :+

Met vim kun je, zoals Hero of Time al aangeeft, met :s/foo/bar/g search & replacen (wel 1 voor 1, door de /g switch aan het einde). Met :%s/foo/bar worden direct alle woorden vervangen. Vergeet de : niet bij vi(m), daardoor kom je in command line mode en kun je dergelijke commands aanroepen.

http://vim.wikia.com/wiki/Search_and_replace

[ Voor 7% gewijzigd door ihre op 23-07-2013 17:08 ]


Acties:
  • 0 Henk 'm!

  • begintmeta
  • Registratie: November 2001
  • Niet online

begintmeta

Moderator General Chat
Ik gebruik vrijwel altijd nano of sed, kon me er nooit tot zetten me echt in vi te verdiepen, maar de basics lukken wel, het een en ander overlapt tenslotte ook.

Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

ihre schreef op dinsdag 23 juli 2013 @ 16:38:
Met vim kun je, zoals Hero of Time al aangeeft, met :s/foo/bar/g search & replacen (wel 1 voor 1, door de /g switch aan het einde). Met :%s/foo/bar worden direct alle woorden vervangen.
Precies andersom. /g betekend doorgaan op dezelfde regel. Anders wordt alleen de 1e occurence vervangen.

Aangezien je "templates" op je server hebt staan, kun je ook ziets doen:
code:
1
cat template.sh | sed 's/VAR1/WAARDE1/g' > script.sh


"script.sh" bevat hierna het nieuwe script.

Je kunt ook sed chainen:
code:
1
cat template.sh | sed 's/var1/waarde1/g' | sed 's/var2/waarde2/g' | sed 's/var3/waarde3/g' > newscript.sh


etc.

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • vanaalten
  • Registratie: September 2002
  • Laatst online: 20:35
Rainmaker schreef op woensdag 24 juli 2013 @ 02:50:
Je kunt ook sed chainen:
code:
1
cat template.sh | sed 's/var1/waarde1/g' | sed 's/var2/waarde2/g' | sed 's/var3/waarde3/g' > newscript.sh
Oh bah... 'useless use of cat', onnodig vaak sed aanroepen...
code:
1
sed 's/var1/waarde1/g;s/var2/waarde2/g;s/var3/waarde3/g' template.sh > newscript.sh

zou het ook moeten doen. En als het om leesbaarheid gaat: verdeel het over meerdere regels.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 22:26

Hero of Time

Moderator LNX

There is only one Legend

Rainmaker schreef op woensdag 24 juli 2013 @ 02:50:
[...]


Precies andersom. /g betekend doorgaan op dezelfde regel. Anders wordt alleen de 1e occurence vervangen.
Eh, helemaal niet andersom. Met /g doe je alles op die regel, elke occurrence. Doe je %s, dan pak je het hele document, eerste op elke regel. %s//g doet alles in het gehele document.
Aangezien je "templates" op je server hebt staan, kun je ook ziets doen:
code:
1
cat template.sh | sed 's/VAR1/WAARDE1/g' > script.sh


"script.sh" bevat hierna het nieuwe script.

Je kunt ook sed chainen:
code:
1
cat template.sh | sed 's/var1/waarde1/g' | sed 's/var2/waarde2/g' | sed 's/var3/waarde3/g' > newscript.sh


etc.
Met hierboven, onnodig catten en te veel chainen. M'n Linux leraar op 't HBO gaf ook al aan, 'om een bestand te kopiëren gebruik je cat bestand > nieuwbestand'. Echt, :r.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 22:42

CAPSLOCK2000

zie teletekst pagina 888

Voor wat simpel vervangwerk is m4 ook wel een leuke optie.
code:
1
2
3
4
5
6
casper@port:/tmp$ cat test.m4
Dit is een test.
casper@port:/tmp$ m4 test.m4 
Dit is een test.
casper@port:/tmp$ m4 -D test=succes test.m4 
Dit is een succes.

This post is warranted for the full amount you paid me for it.

Pagina: 1