Sujet : Re: a sed question
De : smirzo (at) *nospam* example.com (Salvador Mirzo)
Groupes : comp.unix.shellDate : 19. Dec 2024, 13:05:57
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <87wmfv27yy.fsf@example.com>
References : 1 2
Ralf Damaschke <
rwspam@gmx.de> 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.htmlsays 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!