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?


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
  • 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
  • This will only replace every foo with bar not the whole line.. – Jahid Jun 13 '15 at 19:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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