replace - Optimal string replacing in files for AIX -
i need remove 40 emails several files in distribution list. 1 address might appear in different files , need removed of them. working in directory several .sh files have several lines.
i have done in couple of test files:
find . -type f -exec grep -li  address_to_find {} 2>/dev/null \; | xargs sed -i 's/address_to_remove/ /g' * it works fine once try in real files, takes long time , sits there. need run in different servers, main cause want optimize this.
i have tried run this:
find . -type f -name '*sh' 2>/dev/null | xargs grep address_to_find but return:
./filecontainingaddress.sh:address_to_find how add this:
awk '{print substr($0,1,10)}' but return me before ":"?
i can rest there, haven't found how trim part
you can use -exec predicate in find, long don't use multiple file + version, means can provide several -exec clauses each of dependent on success of previous one. style avoid construction of lists of filenames, makes more robust in face of files odd characters in names.
for example:
find . -type f -name '*sh' \      -exec grep -qi address_to_find {} \; \      -exec sed -i 's/address_to_find/ /g' {} \; you want provide address parameter rather having type twice, unless meant 2 instance different (address_to_find vs. address_to_remove):
clean() {   find . -type f -name '*sh' \        -exec grep -qi "$1" {} \; \        -exec sed -i "s/$1/ /g" {} \; } (watch out / in argument clean. i'll leave making sed more robust exercise.)
Comments
Post a Comment