Path: csiph.com!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Salvador Mirzo Newsgroups: comp.unix.shell Subject: Re: a sed question Date: Thu, 19 Dec 2024 09:05:57 -0300 Organization: A noiseless patient Spider Lines: 53 Message-ID: <87wmfv27yy.fsf@example.com> References: <874j304vv3.fsf@example.com> MIME-Version: 1.0 Content-Type: text/plain Injection-Date: Thu, 19 Dec 2024 13:06:02 +0100 (CET) Injection-Info: dont-email.me; posting-host="60c6773209ab34655d378d4cfa1269fc"; logging-data="3006065"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18+p+yesX/5hilDA7eajd+QRSNuIOllDlI=" Cancel-Lock: sha1://YWydHo40+ExgZNy/Zi6X3L9ys= sha1:6VD6ku1PE9iymFfKE9RWxZXiLFQ= Xref: csiph.com comp.unix.shell:25976 Ralf Damaschke writes: > Salvador Mirzo wrote: > >> 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. > > The specification in https://pubs.opengroup.org/onlinepubs/9799919799/ That's the home page. I believe you meant to link the sed page directly. When copying URLs from the specification, we need to copy the framed URL, otherwise we always end up at the home page. The framed sed page is at https://pubs.opengroup.org/onlinepubs/9799919799/utilities/sed.html > says at the end of the c command "Start the next cycle." > So any commands following it won't be executed. > The rationale does not mention the reason for the behavior specified. Interesting. Thanks for mentioning. I wonder if I understand the information. I tried to change a line and then append another. In both FreeBSD's and GNU's sed, I the append takes place (and I thought they would not if they were to obey the specification). $ cat x.txt a line x more lines more lines $ sed '/^x/{c\ hello a\ hi }' x.txt a line hello hi more lines more lines $ > Here, replacing the single-line c command with s/.*/$tag/ would do it. > If you needed a range of lines to be changed, that might become tricky. I don't need a range of lines to be changed, but I'd like to replace the string only in the second line of the narrow region of interest. I tried your idea and it works, so I guess that way I can be POSIX-compliant. -- Thanks!