Groups | Search | Server Info | Login | Register
Groups > comp.unix.questions > #561
| Path | csiph.com!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail |
|---|---|
| From | Salvador Mirzo <smirzo@example.com> |
| Newsgroups | comp.unix.shell, comp.unix.questions |
| Subject | a sed question |
| Followup-To | comp.unix.shell |
| Date | Wed, 18 Dec 2024 16:46:56 -0300 |
| Organization | A noiseless patient Spider |
| Lines | 103 |
| Message-ID | <874j304vv3.fsf@example.com> (permalink) |
| MIME-Version | 1.0 |
| Content-Type | text/plain |
| Injection-Date | Wed, 18 Dec 2024 20:47:02 +0100 (CET) |
| Injection-Info | dont-email.me; posting-host="94d9c60a35d521a9354fa25b9e1f9292"; logging-data="2562909"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1974td3IQE1T0o/PLzPiKP11JN/3kfgkTo=" |
| Cancel-Lock | sha1:9sCtKsl+5yVm7/vWpuFs5CjLeHs= sha1:VLjNISIGTnBMI24X+Wptt6SK9V4= |
| Xref | csiph.com comp.unix.shell:25973 comp.unix.questions:561 |
Cross-posted to 2 groups.
Followups directed to: comp.unix.shell
Show key headers only | View raw
(*) 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