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.
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.Sign up to join this community
Search for a line that starts with
projdir, and replace the whole line with a new one:
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
$ are beginning/end-of-line markers, so the pattern will match the whole line;
.* matches anything. The
sed to write the changes directly to
.ignore, instead of just outputting them
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
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.
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