a sed question

Liste des GroupesRevenir à cu questions 
Sujet : a sed question
De : smirzo (at) *nospam* example.com (Salvador Mirzo)
Groupes : comp.unix.shell comp.unix.questions
Suivi-à : comp.unix.shell
Date : 18. Dec 2024, 20:46:56
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <874j304vv3.fsf@example.com>
(*) Summary

I wrote a sed script that makes a line replacement after it finds the
right spot.  So far so good.  Then I added quit command after the
change, but the quit does not seem to take effect---violating my
expectation.  I'll appreciate any help on understanding what's going on.

(*) A detailed description

I wrote this program:

--8<-------------------------------------------------------->8---
%cat make-release
#!/bin/sh
usage()
{
  printf '%s tag file\n' $0
  exit 1
}
test $# '<' 2 && usage
tag="$1"
shift
sed "/<<Release>>=/ {
 n;
 c\
$tag
}" $*
--8<-------------------------------------------------------->8---

Here's how I use it.  My objective with it is to replace that
/something/ in the text file with a new argument.

--8<-------------------------------------------------------->8---
%cat sample.txt
Lorem ipsum dolor...

<<Release>>=
something
@

... sit a met [...]
%
--8<-------------------------------------------------------->8---

Here's how I invoke it:

--8<-------------------------------------------------------->8---
%sh make-release release1 sample.txt
Lorem ipsum dolor...

<<Release>>=
release1
@

... sit a met [...]
--8<-------------------------------------------------------->8---

So far so good.  I decided to try it on longer files and I wanted to see
the change more quickly (without long files scrolling past my terminal),
so I decided to add a /q/ command right after the c commmand.  I
thought---it will make sed quit right after making the change, so I can
see it works as desired and then I remove the /q/ and release it to
production.  But that did not happen.

--8<-------------------------------------------------------->8---
%cat make-release
#!/bin/sh
usage()
{
  printf '%s tag file\n' $0
  exit 1
}
test $# '<' 2 && usage
tag="$1"
shift
sed "/<<Release>>=/ {
 n;
 c\
$tag
q}" $*
--8<-------------------------------------------------------->8---

I still see the whole file:

--8<-------------------------------------------------------->8---
%sh make-release release1 sample.txt
Lorem ipsum dolor...

<<Release>>=
release1
@

... sit a met [...]
%
--8<-------------------------------------------------------->8---

I failed the exercise I gave myself.  Can you help me to understand why
the q command isn't stopping sed as I thought it would?  I'd like to get
a better intuition.

I've been reading Dale Dougherty and Arnold Robin's ``sed & awk'' book.
If you have any recommended sed-related bibliography, I'd appreciate it,
too.

Date Sujet#  Auteur
18 Dec 24 o a sed question1Salvador Mirzo

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal