How can I replace text after a specific word using sed?
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
Related videos on Youtube
Michael Mrozek
Updated on September 18, 2022Comments
-
Michael Mrozek over 1 year
I have a file named
.ignore
. In need to replace theprojdir
. 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 over 7 yearsCan you please extend your answer and clarify what is what?
-
Anthony Geoghegan over 7 yearsAnswers are much more useful if they include explanations for how and why a command or piece of code works.
-
Tinu about 7 yearsI hope this is more useful after edit
-
Elijah Lynn about 4 yearsIf you use the long option for
-i
, which is--in-place
then the example will be more self-documenting. -
cregox almost 4 yearsanyone mind to explain why this was not a good answer? what have i missed?
-
cregox almost 4 yearsthis 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 over 3 years@cregox, welcome to SE. Posting just links and trying to evoke curiosity is not the style used here.
-
Timo over 3 yearsYou missed the solution, does not work.
-
cregox over 3 years@timo thanks! indeed, it needs to be fixed...
-
David Ramirez about 3 yearsActually this solution has been very educative, and I'm using a variation of it in an actual issue.
-
cregox about 3 years@David thanks for the feedback! i'm glad the fix worked. 🥰