Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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
add comment

2 Answers

up vote 5 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
add comment

You can use inplace functionnality of sed :

sed -i -e 's/foo/bar/' myfile.txt
share|improve this answer
add comment

Your Answer

 
discard

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.