Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The command

 grep "foo" myfile.txt

prints all matching lines in my file.

Now I want to replace the full line with another string. How can I do that?

share|improve this question
up vote 9 down vote accepted

If you're matching a substring of the whole line, you can either use sed's s command with a regex to mop up the rest of the line:

sed -i 's/^.*foo.*$/another string/' myfile.txt

or use the c command to replace the matched line in one go:

sed -i '/foo/ { c \
another string
}' myfile.txt

If you don't want to type multiline commands at the prompt, you can put it in a script instead:

$ cat foo.sed
/foo/ { c \
another string

$ sed -i -f foo.sed myfile.txt
share|improve this answer
thanks! when i use the second option i get: sed: -e expression #1, char 0: unmatched `{' – clamp Feb 24 '12 at 10:34
at the end of the first line, you need to type \ and then hit Return - it's important that the \ escapes that first newline. Then, make sure the }' is on a seperate line from another string: the replacement is everything on that second line, including the } if you put it there. – Useless Feb 24 '12 at 12:44

You can use inplace functionnality of sed :

sed -i -e 's/foo/bar/' myfile.txt
share|improve this answer
This will only replace every foo with bar not the whole line.. – Jahid Jun 13 '15 at 19:38

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.