sed probleempje

Pagina: 1
Acties:

  • jaapkroe
  • Registratie: Januari 2006
  • Laatst online: 19-12-2025
Ik wil sed overal in een bestand waar het teken ' voorkomt (dus apostrof) en dan een random tekst geeindigd door weer een ' laten vervangen door ` (het beest dat de andere kant op staat) dan die tekst en dan weer '
Dus eigenlijk alleen de eerste apostrof vervangen door `
Ik dacht eerst zoiets te doen als:

sed -e 's/'.*'/`.*'/g'

maar dat werkt om twee redenen niet, ten eerste is gebruik ik dan het teken ' waar het niet kan, dus dat moest iets anders zijn maar \' werkt niet en ik kan het nergens vinden. Ten tweede ziet sed de tweede .* niet als kopie van de eerste .* (dus de random zin die tussen de apostrofs staat) maar gewoon als de tekens .*

Kan iemand me hier mee helpen?

Alvast bedankt!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Probeer het volgende eens (niet getest):
code:
1
sed -e "s/'.*?'/`\\1'/g"

  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 23:25

zomertje

Barisax knorretje

Kun je niet even een voorbeeldstukje van je bestand laten zien? Want als dit bijvoorbeeld alleen uit losse regels bestaat met ongeveer dezelfde vorm dan is het misschien wel op te lossen zonder die wildcards voor de hele zin.

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


  • vanaalten
  • Registratie: September 2002
  • Laatst online: 19:35
eghie schreef op zondag 22 januari 2006 @ 12:46:
code:
1
sed -e "s/'.*?'/`\\1'/g"
- Dat vraagteken hoort er volgens mij niet?
- d'r moeten nog ronde haakjes in om tekst te kunnen onthouden
- quote de verkeerde kant op moet escaped.

Bij mij werkt het zo:
code:
1
sed -e "s/'\(.*\)'/\`\\1'/g"

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

vanaalten schreef op zondag 22 januari 2006 @ 12:52:
[...]


- Dat vraagteken hoort er volgens mij niet?
Volgens mij doet hij het dan wel beter. Dit heeft te maken met dat met sterretje de laatst matchende teken pakt en met de ? erbij de eerst matchende teken pakt.
- d'r moeten nog ronde haakjes in om tekst te kunnen onthouden
Klopt, was ik vergeten. Alleen waarom escape je ook die haakjes? Dit is toch niet nodig?
- quote de verkeerde kant op moet escaped.
Waarom? Die heeft toch geen aparte functie binnen regular expressions? edit: ow, hehe was even vergeten dat je met `text` een commando uitvoerde. ;)

Dit werkt bij mij beter:
code:
1
sed -e "s/'\([^']*\)'/\`\\1'/g" bestand

[ Voor 20% gewijzigd door eghie op 22-01-2006 13:09 ]


  • jaapkroe
  • Registratie: Januari 2006
  • Laatst online: 19-12-2025
Allemaal hartstikke bedankt voor jullie snelle reacties.
Het werkt perfect! (ik had alleen eerst de 1 als l (kleine L) gelezen).

Dit is een voorbeeld-tekst waarop ik het getest heb, en dat werkte prima:
'hier staat dus een kwoot'
`maar het kan ook zo'
"of zo"
of zonder..

Na sed loslaten veranderde dus de eerste apostrof.

Het is overigens bedoeld om als eindredactie van een blaadje alle tekens in een keer goed te kunnen zetten (zodat LaTeX er ook goed mee overweg kan).

Nogmaals bedankt, ik zat hier al een tijdje mee te klungelen ik snap nu ook beter hoe ik met sed moet werken.

Verwijderd

eghie schreef op zondag 22 januari 2006 @ 12:58:
Volgens mij doet hij het dan wel beter. Dit heeft te maken met dat met sterretje de laatst matchende teken pakt en met de ? erbij de eerst matchende teken pakt.
Sed is geen Perl. ? is extended. Dat werkt niet in sed, voor één teken kan echter [^x] gebruikt worden, zoals hieronder. (Met x het teken.)
Klopt, was ik vergeten. Alleen waarom escape je ook die haakjes? Dit is toch niet nodig?
Wederom, sed is geen Perl, () als magische tekens is alleen voor extended expressies. Sed ondersteunt deze niet (standaard). Daarom moet je ( actief maken met een \.
Dit werkt bij mij beter:
code:
1
sed -e "s/'\([^']*\)'/\`\\1'/g" bestand
Inderdaad, dat is de elegantste oplossing (alhoewel de -e nu overbodig is).

Een probleem echter zijn geneste ' ' paren. Ik weet niet of die voorkomen, maar dat kan problematisch zijn. Of het voorkomen van iets als: Hij zei: 'Meestal ga ik 's ochtends naar school.'

[ Voor 4% gewijzigd door Verwijderd op 22-01-2006 22:19 ]

Pagina: 1