mboost-dp1
Problemer med GNU sed
- Forside
- ⟨
- Forum
- ⟨
- Tagwall
Jeg har et lille problem med sed, som jeg håber en af jer, kender løsningen på.
Jeg har en fil, med følgende linje:
jeg prøver så følgende, for at rette det:
og ville ønske at resultatet blev:
hvilket det ikke gør, da jeg får denne fejl:
"sed -e expression #1, char 0: no previous regular expression"
Er der en der har et bud på hvad jeg gør forkert?
Jeg bruger sed ver. 4.1.5, hvis det har nogen betydning.
Jeg har en fil, med følgende linje:
MANDIR = $(INSTDIR)/man
jeg prøver så følgende, for at rette det:
sed -i "s,$(INSTDIR),$(PACKAGEDIR),g" Makefile
og ville ønske at resultatet blev:
MANDIR = $(PACKAGEDIR)/man
hvilket det ikke gør, da jeg får denne fejl:
"sed -e expression #1, char 0: no previous regular expression"
Er der en der har et bud på hvad jeg gør forkert?
Jeg bruger sed ver. 4.1.5, hvis det har nogen betydning.
Jeg skimmede overskriften og troede, at du havde et problem med gnusæd. Dét kunne jeg måske have hjulpet med.
BurningShadow (3) skrev:Jeg har prøvet en \ men det hjalp ikke.
Har du prøvet med to? Dollartegnet har hver sin specialbetydning i søg-delen og erstat-delen.
$ sed --version | grep version
GNU sed version 4.2.1
$ echo 'MANDIR = $(INSTDIR)/man' > Makefile
$ sed -i "s,\$(INSTDIR),\$(PACKAGEDIR),g" Makefile
$ cat Makefile
MANDIR = $(PACKAGEDIR)/man
#4 virker, hvis jeg smider det i et selvstændigt script, som jeg så kalder. Det er også helt Ok, så fristes jeg ikke til at lave noget grimt rod ;-)
Du har begået to fejl. Du har brugt doublequotes i stedet for singlequotes, hvilket gør at din shell vil fortolke $ tegnene. Jeg ved ikke hvilken shell du bruger. I bash giver kommandoen følgende fejl pga. forkerte quotes:
INSTDIR: command not found
PACKAGEDIR: command not found
Hvis man har brug for at nogle tegn fortolkes af shell og andre ikke gør, så kan man lave mere avancerede konstruktioner så som escaping og kombinationer af forskellige typer quotes. Men da du bare skal have det hele sendt videre uden fortolkning af shell, er det nemmest blot at bruge singlequotes.
Den anden fejl er at du har glemt at bruge -e for at angive at shell scriptet er på kommandolinien.
Jeg tror det du mente var:
sed -i -e 's,$(INSTDIR),$(PACKAGEDIR),g' Makefile
INSTDIR: command not found
PACKAGEDIR: command not found
Hvis man har brug for at nogle tegn fortolkes af shell og andre ikke gør, så kan man lave mere avancerede konstruktioner så som escaping og kombinationer af forskellige typer quotes. Men da du bare skal have det hele sendt videre uden fortolkning af shell, er det nemmest blot at bruge singlequotes.
Den anden fejl er at du har glemt at bruge -e for at angive at shell scriptet er på kommandolinien.
Jeg tror det du mente var:
sed -i -e 's,$(INSTDIR),$(PACKAGEDIR),g' Makefile
#13
Haha! :-)
Jeg er godt nok glad for vim ikke tillader at man bruger bogstaver som delimiters :-)
Jeg kan se at ed tillader det.
Thanks for sharing
Haha! :-)
Jeg er godt nok glad for vim ikke tillader at man bruger bogstaver som delimiters :-)
Jeg kan se at ed tillader det.
Thanks for sharing
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.