Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connectionsPath: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Ed Morton Newsgroups: comp.unix.shell Subject: Re: a sed question Date: Sat, 21 Dec 2024 08:13:52 -0600 Organization: A noiseless patient Spider Lines: 87 Message-ID: References: <874j304vv3.fsf@example.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sat, 21 Dec 2024 15:13:52 +0100 (CET) Injection-Info: dont-email.me; posting-host="bb9846ad42d0809f727f455bcc1abbec"; logging-data="89276"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+5eriiE4Ca94jG/C66HgGb" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:Qpa9YZl4wrOXYVSroO4f3mK8E6c= Content-Language: en-US X-Antivirus-Status: Clean X-Antivirus: Avast (VPS 241221-2, 12/21/2024), Outbound message In-Reply-To: <874j304vv3.fsf@example.com> Bytes: 3528 On 12/18/2024 1:46 PM, Salvador Mirzo wrote: > (*) 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 "/<>=/ { > 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... > > <>= > something > @ > > ... sit a met [...] > % > --8<-------------------------------------------------------->8--- I'm not going to get into what might be wrong in your sed script because, while sed is great for doing s/old/new/ on individual lines, for anything else you should just use awk for some combination of robustness, clarity, portability, maintainability, and all of the other desirable attributes of good software. For example, if there's always just 1 line of text under `<>=` then using any POSIX awk you could do: tag="$tag" awk ' !f { print } { f = 0 } $0 == "<>=" { print ENVIRON["tag"] f = 1 } ' "${@:--}" or if it can be multiple lines ending with `@`: tag="$tag" awk ' $0 == "@" { f = 0 } !f { print } $0 == "<>=" { print ENVIRON["tag"] f = 1 } ' "${@:--}" If you want to temporarily exit after printing the replaced value just add `exit` after `f = 1`. Note that `tag="$tag" awk` have to be on a single line exactly as shown. See https://stackoverflow.com/questions/19075671/how-do-i-use-shell-variables-in-an-awk-script for more info on using shell variables values in an awk script and https://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed for more info on using shell variables values in a sed script. Ed.