a sed question

Liste des GroupesRevenir à cu shell 
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 Dec20:46 * a sed question48Salvador Mirzo
18 Dec21:12 +- Re: a sed question1John-Paul Stewart
19 Dec02:14 +* Re: a sed question16Ralf Damaschke
19 Dec13:05 i`* Re: a sed question15Salvador Mirzo
20 Dec01:55 i `* Re: a sed question14Ralf Damaschke
20 Dec13:44 i  `* Re: a sed question13Kenny McCormack
21 Dec01:17 i   `* Re: a sed question12Ralf Damaschke
21 Dec04:09 i    `* Re: a sed question11Kaz Kylheku
21 Dec04:36 i     +* sed... (Was: a sed question)8Kenny McCormack
21 Dec04:57 i     i`* Re: sed... (Was: a sed question)7Kaz Kylheku
21 Dec15:38 i     i +* Re: sed... (Was: a sed question)4Janis Papanagnou
21 Dec17:29 i     i i`* Re: sed... (Was: a sed question)3Janis Papanagnou
21 Dec23:23 i     i i `* Re: sed...2Keith Thompson
22 Dec00:33 i     i i  `- Re: sed...1Janis Papanagnou
21 Dec22:46 i     i `* Re: sed... (Was: a sed question)2Lars Poulsen
22 Dec22:22 i     i  `- Re: sed... (Was: a sed question)1Kaz Kylheku
21 Dec15:35 i     +- Re: a sed question1Janis Papanagnou
22 Dec01:43 i     `- Re: a sed question1Ralf Damaschke
20 Dec15:55 +* Re: a sed question18Janis Papanagnou
20 Dec16:11 i+* Checking for right # of args in a shell script (Was: a sed question)3Kenny McCormack
20 Dec16:49 ii`* Re: Checking for right # of args in a shell script (Was: a sed question)2Janis Papanagnou
20 Dec18:43 ii `- Re: Checking for right # of args in a shell script (Was: a sed question)1Kenny McCormack
21 Dec13:17 i+* Re: a sed question13Salvador Mirzo
21 Dec16:19 ii+* Re: a sed question7Janis Papanagnou
21 Dec22:41 iii`* Re: a sed question6Keith Thompson
22 Dec00:50 iii `* Re: a sed question5Janis Papanagnou
22 Dec01:26 iii  +* Re: a sed question2Keith Thompson
22 Dec01:41 iii  i`- Re: a sed question1Janis Papanagnou
22 Dec01:31 iii  `* Re: a sed question2Lawrence D'Oliveiro
22 Dec02:06 iii   `- Re: a sed question1Janis Papanagnou
21 Dec16:34 ii+* Re: a sed question4Andy Walker
21 Dec17:14 iii+- Re: a sed question1Janis Papanagnou
21 Dec19:21 iii`* Re: a sed question2Salvador Mirzo
21 Dec20:48 iii `- Re: a sed question1Janis Papanagnou
21 Dec19:20 ii`- Re: a sed question1Helmut Waitzmann
22 Dec19:23 i`- Re: a sed question1Janis Papanagnou
21 Dec15:13 `* Re: a sed question12Ed Morton
21 Dec22:09  `* Re: a sed question11Lawrence D'Oliveiro
22 Dec01:02   +* Re: a sed question8Janis Papanagnou
22 Dec01:28   i`* Re: a sed question7Lawrence D'Oliveiro
22 Dec01:36   i +* Re: a sed question5Keith Thompson
22 Dec02:52   i i`* Re: a sed question4Lawrence D'Oliveiro
22 Dec06:09   i i `* Re: a sed question3Keith Thompson
22 Dec06:56   i i  `* Re: a sed question2Lawrence D'Oliveiro
22 Dec07:55   i i   `- Re: a sed question1Keith Thompson
22 Dec02:22   i `- Re: a sed question1Janis Papanagnou
22 Dec02:09   +- Re: a sed question1Kenny McCormack
22 Dec21:03   `- Re: a sed question1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal