Sed - replace text

Pagina: 1
Acties:

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 08-02 21:31

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik probeer met sed een regel in een script aan te passen:

sed -i 's/0.0.0.0/\192.168.0.1/' default.profile

Echter gaat het fout op deze regel. Als ik echter deze regel gebruik gaat het wel goed:

sed -i 's/0.0.0.0/\ 192.168.0.1/' default.profile

Maar dan zit ik met een spatie voor het 192 adres. Weet iemand hoe ik dit oplos dat het zonder spaties wordt vervangen?

http://www.xbmcfreak.nl/


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Waarom staat die backslash er? Want die veroorzaakt je probleem.

All my posts are provided as-is. They come with NO WARRANTY at all.


  • JeroenE
  • Registratie: Januari 2001
  • Niet online
sed -i 's/0.0.0.0/\ 192.168.0.1/' default.profile
Wat gaat er precies mis? Het probleem zal wel zijn dat je een \ gebruikt. Dat is een speciaal teken onder linux...Waarschijnlijk wil sed iets met "\1" doen (invoegen van character 1 ofzo) en voor "\ " zal hij een spatie gebruiken.

Verwijderd

Die backslash idd. Als je hem niet wil hebben verwijderen, als die \ in je replace tekst hoort: Er nog een voorzetten.

'\' is altijd de aankondiging dat tie iets bijzonders (of juist niet) met het volgende teken moet gaan doen.

  • itsme
  • Registratie: Februari 2000
  • Niet online
jeroene schreef op dinsdag 02 augustus 2005 @ 14:13:
[...]
Wat gaat er precies mis? Het probleem zal wel zijn dat je een \ gebruikt. Dat is een speciaal teken onder linux...Waarschijnlijk wil sed iets met "\1" doen (invoegen van character 1 ofzo) en voor "\ " zal hij een spatie gebruiken.
In dat geval gok ik dat \\ t wel doet ;)

edit:

volgens mij bedoeld thijsdetweede dat ook ;)

[ Voor 11% gewijzigd door itsme op 02-08-2005 14:16 ]

"If God wanted us to have unlimited free energy He would have put a giant fusion reactor in the sky"


Verwijderd

en als je in een .sed bestandje dit zet ?
code:
1
s/0.0.0.0/192.168.1.0/g

En dat dit even doet:
code:
1
sed -f ip.sed file1 > file2


Overigens moet dit ook werken:
code:
1
sed s/0.0.0.0/192.168.1.0/g file1 > file2


Die \ duidt op een escape character voor in /\192.
Dus je escaped 1
Bij \<space> is het een spatie

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 08-02 21:31

Erhnam

het Hardware-Hondje :]

Topicstarter
CyBeR schreef op dinsdag 02 augustus 2005 @ 14:09:
Waarom staat die backslash er? Want die veroorzaakt je probleem.
Het is voor mij ook vrij nieuw maar wat er mis gaat zonder spatie.. Dat hij iets verwacht wat er niet is.. Het is vrij simpel volgens mij maar ik ben helaas geen sed expert... Verder moet het in het bestand zelf gebeuren en er dus geen nieuw bestand ontstaan.

http://www.xbmcfreak.nl/


  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:54
Vraag was dus, waarom heb je die \ er in de eerste plaats neergezet, want die komt (neem ik aan) niet voor in de inputfile. Dus is hij bij het matchen ook nergens voor nodig toch?

Verder kun je met sed niet vervangen binnen een bestand. Dat kan echter wel met bv. 'ed', maar het gebruik daarvan is, laten we zeggen, nog minder leesbaar dan sed ;)

.

  • bodiug
  • Registratie: Augustus 2001
  • Laatst online: 10-02 13:43
code:
1
perl -pi -e 's/0.0.0.0/192.168.0.1/' default.profile


Je kan het ook met perl doen.

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Wilke schreef op dinsdag 02 augustus 2005 @ 14:53:
Verder kun je met sed niet vervangen binnen een bestand. Dat kan echter wel met bv. 'ed', maar het gebruik daarvan is, laten we zeggen, nog minder leesbaar dan sed ;)
Niet direct nee, maar met > bestand werkt het wel

Daar moet je overigens wel mee uitkijken aangezien de buffer nogal klein is en met bestanden die wat te groot zijn zal je data verliezen.
Het beste is dan ook om het zo te doen:
sed 's/a/b/' bronbestand > tijdelijkbestand && mv tijdelijkbestand bronbestand

Blog [Stackoverflow] [LinkedIn]


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 08-02 21:31

Erhnam

het Hardware-Hondje :]

Topicstarter
Okee perfect! Met de perl regel lukt het wel! Bedankt voor info!

http://www.xbmcfreak.nl/


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 08-02 21:31

Erhnam

het Hardware-Hondje :]

Topicstarter
Toch nog niet helemaal :(

Ik heb de volgende bash regel:

perl -pi -e 's/0.0.0.0/$IPNEW/' default.profile

Wat er nu gebeurt is dat de waarde van $IPNEW dus helemaal leeg. Het vreemde is dat als ik
echo $IPNEW > test

doe en deze file open dan er wel een correct IP-adres staat.

Als ik vanaf de commandline

perl -pi -e 's/0.0.0.0/192.168.1.1/' default.profile

uitvoer werkt het wel.. Iemand?

http://www.xbmcfreak.nl/


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

'' vervangen door "".

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Probeer dit maar eens dan zal je het wel begrijpen
export testvar='abcd'
echo Zonder quotes $testvar
echo 'Enkele quotes $testvar'
echo "Dubbele quotes $testvar"

[ Voor 20% gewijzigd door Wolfboy op 02-08-2005 17:43 . Reden: consequent blijven ]

Blog [Stackoverflow] [LinkedIn]

Pagina: 1