Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.debian.user > #243621

Re: Replace line in file based on pattern

From john doe <johndoe65534@mail.com>
Newsgroups linux.debian.user
Subject Re: Replace line in file based on pattern
Date 2022-01-03 07:50 +0100
Message-ID <DBpkl-548-1@gated-at.bofh.it> (permalink)
References <DBi9c-Mv-5@gated-at.bofh.it> <DBisy-SG-3@gated-at.bofh.it> <DBkNI-26v-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On 1/3/2022 2:56 AM, Paul M. Foster wrote:
> On 1/2/22 6:20 PM, The Wanderer wrote:
>> On 2022-01-02 at 17:52, Paul M. Foster wrote:
>>
>>> Folks:
>>>
>>> In a script, I'd like to search for a pattern in a file, and replace
>>> that line entirely with a new line, once (not globally). I've tried
>>
>> What do you mean by "globally"?
>
> "Globally" just means I want to replace the first instance, rather than
> appending the 'g' modifier to the sed expression.
>
>>
>> If you mean that you want to only replace the first matching line in the
>> file, but leave any subsequent matching lines alone... I've never
>> actually had occasion to do that, but a bit of Googling (for 'sed first
>> match only') found me
>>
>> https://stackoverflow.com/questions/148451/how-to-use-sed-to-replace-only-the-first-occurrence-in-a-file
>>
>>
>> which looks like at least the seed of a way to do it; see also below.
>>
>>> sed -i s/search/new_line/
>>>
>>> but this only replaces the string itself. I want the script to find the
>>> line my search term is on, and replace the whole line with my
>>> replacement line.
>>>
>>> Anyone know how to do this?
>>
>> Without re-testing at the moment, I'd say from past experience that you
>> want:
>>
>> sed -i 's/^.*search.*$/new_line/'
>>
>> This matches the beginning of the line, followed by zero or more
>> characters, followed by the search string, followed by zero or more
>> characters, followed by the end of the line.
>
> This works, as I mentioned in another reply. The context here is a file
> which would have something like: ';extension=gd', to be replaced by
> 'extension=gd'. That is, I want to programmatically uncomment a line, in
> most cases.

In addition to the other answers:

In the below cmds '/^# extension=md/' will only modify the line matching
that specific pattern, the first cmd will only replace '# ' while the
second will answer your original question.

$ printf "%s\n" extention=md '# extension=md' '#extension=md' | sed '/^#
extension=md/s/# //'

$ printf "%s\n" extention=md '# extension=md' '#extension=md' | sed '/^#
extension=md/s/^# extension=md.*/extension=md/'


Note that this e-mail is folded by my mailer.

--
John Doe

Back to linux.debian.user | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

Replace line in file based on pattern "Paul M. Foster" <paulf@quillandmouse.com> - 2022-01-03 00:10 +0100
  Re: Replace line in file based on pattern Andy Smith <andy@strugglers.net> - 2022-01-03 00:20 +0100
    Re: Replace line in file based on pattern "Paul M. Foster" <paulf@quillandmouse.com> - 2022-01-03 03:00 +0100
  Re: Replace line in file based on pattern The Wanderer <wanderer@fastmail.fm> - 2022-01-03 00:30 +0100
    Re: Replace line in file based on pattern Greg Wooledge <greg@wooledge.org> - 2022-01-03 00:50 +0100
      Re: Replace line in file based on pattern The Wanderer <wanderer@fastmail.fm> - 2022-01-03 02:20 +0100
        Re: Replace line in file based on pattern Greg Wooledge <greg@wooledge.org> - 2022-01-03 02:50 +0100
          Re: Replace line in file based on pattern "Paul M. Foster" <paulf@quillandmouse.com> - 2022-01-03 03:30 +0100
            Re: Replace line in file based on pattern Andrei POPESCU <andreimpopescu@gmail.com> - 2022-01-15 13:40 +0100
      Re: Replace line in file based on pattern "Paul M. Foster" <paulf@quillandmouse.com> - 2022-01-03 04:00 +0100
        Re: Replace line in file based on pattern Greg Wooledge <greg@wooledge.org> - 2022-01-03 05:10 +0100
          Re: Replace line in file based on pattern "Paul M. Foster" <paulf@quillandmouse.com> - 2022-01-03 14:40 +0100
            Re: Replace line in file based on pattern David Wright <deblis@lionunicorn.co.uk> - 2022-01-04 20:50 +0100
    Re: Replace line in file based on pattern "Paul M. Foster" <paulf@quillandmouse.com> - 2022-01-03 03:00 +0100
      Re: Replace line in file based on pattern john doe <johndoe65534@mail.com> - 2022-01-03 07:50 +0100

csiph-web