bug-sed
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#28056: Substitution doing global when it should not.


From: Eric Blake
Subject: bug#28056: Substitution doing global when it should not.
Date: Fri, 11 Aug 2017 17:39:27 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

tag 28056 notabug
thanks

On 08/11/2017 03:04 PM, Techwolf Lupindo wrote:

> address@hidden ~/test $ sed -e 's:COMMAND ${MERCURIAL}:COMMAND
> ${MERCURIAL} --cwd ${CMAKE_SOURCE_DIR}:' BuildVersion.cmake >
> BuildVersion1.cmake
> address@hidden ~/test $ sed -e 's:COMMAND ${MERCURIAL}:COMMAND
> ${MERCURIAL} --cwd ${CMAKE_SOURCE_DIR}:g' BuildVersion.cmake >
> BuildVersion2.cmake


> 
> The only difference in the sed commands was s/// and s///g.

Which tells sed whether to make one substitution on every affected line,
or as many substitutions as possible on every affected line.  But the
number of affected lines remains unchanged for the two variants.

> The diff
> between BuildVersion1.cmake and BuildVersion2.cmake should had one change.

Rather, one change per affected line.

> But sed is matching two lines without the s///g. All docs I have read says
> that without 'g', only the first match is changed.

Only the first match per line - but when both lines affected only had
one match per line, there's no difference in using the 'g' flag.

If you want sed to stop processing as soon as it has changed one line,
rather than going on to look for additional affected lines, you can do so:

sed -e '/COMMAND ${MERCURIAL}/ { s::COMMAND ${MERCURIAL} -- cwd
${CMAKE_SOURCE_DIR}: ; q }'

which says find the first line that matches the pattern, and on that
line make the substitution and immediately quit.

Since sed is behaving as documented, I'm closing this as not a bug;
however, feel free to add further comments to this thread if you need
followup clarification.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]