How can I replace text after a specific word using sed?

110,209

Solution 1

Search for a line that starts with projdir, and replace the whole line with a new one:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^ and $ are beginning/end-of-line markers, so the pattern will match the whole line; .* matches anything. The -i tells sed to write the changes directly to .ignore, instead of just outputting them

Solution 2

One approach is to rewrite the entire line, using backreferences for the parts you want to keep:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

Another approach is to rewrite that part of the line, but only if some other part matches:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

Both examples rewrite the second whitespace-delimited word on lines where the first word is projdir.

Solution 3

Although this is an old post and it seems to be solved for you by the accepted answer, the actual question has not been answered. So for completeness and to help others:

Here the answer that actually matches for "Snake" and not for lines startting with "projdir"...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

This replaces everything from the start of the line including "Snake" with everything before "Snake" + "PacMan". \1 stands for what is matched inside (). Everything after "Snake" remains untouched.

Solution 4

sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^projdir is to find the line that starts with string projdir. The .*$ there stands for the string after projdir in the line the same line. The string projdir PacMan is the string with which we are replacing. g is for global - to replace all such lines starting with projdir. .ignore is the name of the file

Share:
110,209

Related videos on Youtube

Michael Mrozek
Author by

Michael Mrozek

Updated on September 18, 2022

Comments

  • Michael Mrozek
    Michael Mrozek over 1 year

    I have a file named .ignore. In need to replace the projdir. For example:

    ignore \..*
    ignore README
    projdir Snake
    

    I need to replace Snake with, for example, "PacMan". I read the man page, but I have no idea what to do.

  • Atul Vekariya
    Atul Vekariya over 7 years
    Can you please extend your answer and clarify what is what?
  • Anthony Geoghegan
    Anthony Geoghegan over 7 years
    Answers are much more useful if they include explanations for how and why a command or piece of code works.
  • Tinu
    Tinu about 7 years
    I hope this is more useful after edit
  • Elijah Lynn
    Elijah Lynn about 4 years
    If you use the long option for -i, which is --in-place then the example will be more self-documenting.
  • cregox
    cregox almost 4 years
    anyone mind to explain why this was not a good answer? what have i missed?
  • cregox
    cregox almost 4 years
    this doesn't really address the question in a general term, only in the specific example. to be fair, the example was also not general enough... check my post for a more complete (and simpler) answer! and feel free to edit your answer accordingly. 😘
  • Timo
    Timo over 3 years
    @cregox, welcome to SE. Posting just links and trying to evoke curiosity is not the style used here.
  • Timo
    Timo over 3 years
    You missed the solution, does not work.
  • cregox
    cregox over 3 years
    @timo thanks! indeed, it needs to be fixed...
  • David Ramirez
    David Ramirez about 3 years
    Actually this solution has been very educative, and I'm using a variation of it in an actual issue.
  • cregox
    cregox about 3 years
    @David thanks for the feedback! i'm glad the fix worked. 🥰