I have thousands of files here which i have to do a replace on. SO i am trying to create a bash program which will loop through all the old variables and replace them with new variables. So here is what i have currently.

I have a file with all the old and new variables for example: So i would need to replace the first value with the second value. I have named this file new.


now i have written a while loop as follows

while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "s/$old/$new/g" '{}' \; 
done < new

this does work. it replaces the old value with the new value. but in the savedsearches.conf file i am trying to target specific strings to get replaced for example

index = "web_matchmaker"
index= "web_pdconfig"

and not some random sentence in the file like for example

description: web_lgl contains AWS data. which is collected from AWS.

SO i need to tweak my bash script so that i can target only the variables with index= as the starting part and ignore every other occurence of the string. I have tried adding index= to the bash program but i am not getting any hits. for example the below code does not produce any hits.

while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "s/index=$old/index=$new/g" '{}' \; 
done < new

Is there any way to tweak my bash script so that it specifically targets values after index= instead of any random sentence that the find command finds?

1 Answer 1


This regular expression in sed should only do the substitution on lines starting with index.

while IFS="," read old new; do
find . -name "savedsearches.conf" -exec sed "/^index/s/index=$old/index=$new/g" '{}' \; 
done < new
  • This approach will work. Thanks @Anthony. Nov 14, 2022 at 15:51

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.