linux - sed with variable as argument in bash script -


i trying write bash script scan authorized_keys files , remove keys of couple previous employees if found. having 1 heck of time figuring out escaping sed command @ end. using commas instead of / since / can show in ssh-key. appreciated

#!/bin/bash  declare -a keys keys["employee1"]='aaaab3nzac1yc2eaaaabjqaaaieaxoz7zdpjkl98n8cstkfbwaaesnk0m/towtf1mu5nazmm/+1sdo6rjh/ruyyqbjo9s+ahwzlgrhfxt2xbg2sraunubakp0w6qnibej0msa/ifas8afvgdj0pupltkpo6xvzkb8vezsiq+xnk1n5hjrgjnfgwkwey3z1/kolxclhu=' keys["employee2"]='aaaab3nzac1yc2eaaaabiwaaaqeawhynavhb319obvxphyf8cstkfbwaaekr7uckjflpchmpz19w0l/c0g+75hn8coxoqilduhiphyhxoduqjgd/6nxgjdwxgyt00azg5breunbd58wqzplevtzylagmdmibnwppgdjwzqkh/k7/stk6vtkxl6rxbo4lsnk0m/towtf1mu5nazmm/+1sdo6rjh/ruyyqbjo9s+nibej0msa/ifas8afakfo2jjgeqpjmyz7b02xvn5islayc3cb5fxijjuk4lphcapuvyszh2lgve0r5bt/nfgvujjtvjthplgrqkydcdjvutfbjolqgprnpijp6rgic7afdde7bk0yghymxdfwcjjberflguwtywffly3bfio/h/9oeycmqhyb2co4a0iyydnayn9oy6xsrratvlk4q=='  files=`find / -name authorized_keys`  echo "checking authorized_keys files on: " `hostname` echo "" echo "located files: "  file in $files;   echo "  $file" done  echo""  file in $files;   key in "${!keys[@]}";     if grep -q ${keys[$key]} $file;       echo "  *** removing $key $file"       sed "s,${keys[$key]},d" $file     fi   done done 

you've made bit complicated think.

you can using grep -vf , process substitution:

# array hold value want remove keys=( 'aaaab3nzac1yc2eaaaabjqaaaieaxoz7zdpjkl98n8cstkfbwaaesnk0m/towtf1mu5nazmm/+1sdo6rjh/ruyyqbjo9s+ahwzlgrhfxt2xbg2sraunubakp0w6qnibej0msa/ifas8afvgdj0pupltkpo6xvzkb8vezsiq+xnk1n5hjrgjnfgwkwey3z1/kolxclhu=', 'aaaab3nzac1yc2eaaaabiwaaaqeawhynavhb319obvxphyf8cstkfbwaaekr7uckjflpchmpz19w0l/c0g+75hn8coxoqilduhiphyhxoduqjgd/6nxgjdwxgyt00azg5breunbd58wqzplevtzylagmdmibnwppgdjwzqkh/k7/stk6vtkxl6rxbo4lsnk0m/towtf1mu5nazmm/+1sdo6rjh/ruyyqbjo9s+nibej0msa/ifas8afakfo2jjgeqpjmyz7b02xvn5islayc3cb5fxijjuk4lphcapuvyszh2lgve0r5bt/nfgvujjtvjthplgrqkydcdjvutfbjolqgprnpijp6rgic7afdde7bk0yghymxdfwcjjberflguwtywffly3bfio/h/9oeycmqhyb2co4a0iyydnayn9oy6xsrratvlk4q==' )  while ifs= read -d '' -r file;     grep -vf <(printf "%s\n" "${keys[@]}") "$file" > "$file.tmp"     mv "$file.tmp" "$file" done < <(find / -name authorized_keys -print0) 

Comments