Groups | Search | Server Info | Login | Register
Groups > comp.unix.questions > #561
| From | Salvador Mirzo <smirzo@example.com> |
|---|---|
| Newsgroups | comp.unix.shell, comp.unix.questions |
| Subject | a sed question |
| Followup-To | comp.unix.shell |
| Date | 2024-12-18 16:46 -0300 |
| Organization | A noiseless patient Spider |
| Message-ID | <874j304vv3.fsf@example.com> (permalink) |
Cross-posted to 2 groups.
Followups directed to: comp.unix.shell
(*) 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.
Back to comp.unix.questions | Previous | Next | Find similar
a sed question Salvador Mirzo <smirzo@example.com> - 2024-12-18 16:46 -0300
csiph-web