regex - find and replace strings in files in a particular directory -
i have pattern need replace in .hpp
, .h
, .cpp
files in multiple directories.
i have read find , replace particular term in multiple files question guidance. using this tutorial not able achieve intend do. here pattern.
throw some::lengthy::exception();
i want replace this
throw createexception(some::lengthy::exception());
how can achieve this?
update:
moreover, if some::lengthy::exception()
part variant such changes every search result ?
throw some::changing::text::exception();
will converted
throw createexception(some::changing::text::exception());
you can use sed
expression:
sed 's/throw some::lengthy::exception();/throw createexception(some::lengthy::exception());/g'
and add find
command check .h
, .cpp
, .hpp
files (idea coming list files extensions ls , grep):
find . -iregex '.*\.\(h\|cpp\|hpp\)'
all together:
find . -iregex '.*\.\(h\|cpp\|hpp\)' -exec sed -i.bak 's/throw some::lengthy::exception();/throw createexception(some::lengthy::exception());/g' {} \;
note usage of sed -i.bak
in order to edits in place create file.bak
backup file.
variable pattern
if pattern varies, can use:
sed -r '/^throw/s/throw (.*);$/throw createexception(\1);/' file
this replacement in lines starting throw
. catches after throw
;
, prints surrounded createexception();`.
test
$ cat a.hpp throw some::lengthy::exception(); throw you(); asdfasdf throw you(); $ sed -r '/^throw/s/throw (.*);$/throw createexception(\1);/' a.hpp throw createexception(some::lengthy::exception()); throw createexception(you()); asdfasdf throw you();
Comments
Post a Comment