I have 2 sample config file under directory structure /tmp/test where variables are recognize by [].
So the task is, recursilvely go thru parent dir /tmp/test and find out the files with names *.cnf having placeholders for variables.
it's not necessary that all .cnf files got placeholders.
so it will only list /tmp/test/confa/1st_FILE.cnf and /tmp/test/confb/2nd_FILE.cnf where placeholders are there.
not /tmp/test/confa/3rd_FILE.cnf ,
Then it will go each file one by one and replace each place holder to the actual ones based on file /tmp/test/variable.txt
e.g.
after replacement final look should look like
/tmp/test/confa/1st_FILE.cnf.out
Here is my sample test file 1st_FILE.txt.
This will be replaced by 1st_FILE.txt.
/tmp/test/confb/2nd_FILE.cnf.out
This is my 2nd test file 2nd_FILE.txt..This is agian a test file for test purpose.
I know, how to find the files recursively that matches [].
but my question is how can I bind variables from variable.txt to the filename that matched.
find . -type f -exec grep -lIi "\[" {} \; | while read name
> do
> echo $name
> done
--> this will display the files with []
now how can I loop these files with variable.txt and replace the variables with actual values.
cat 1st_FILE.cnf.new
iHere is my sample test file [1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt].
1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txthis will be replaced by [1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txttesttest1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txt1st2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt2nd_FILE.txt.txttest.txt].
so it takes all the variables and replace it within [] for multiple times.
also not removing [].
cat ./1st_FILE.cnf
iHere is my sample test file [TST_FILE].
This will be replaced by [FILE_NAME].
iHere is my sample test file 1st_FILE.txt.
This will be replaced by 1st_FILE.txt.
The problem is awk regards "[" and "]" as special chars to build a regex. You need to somehow persuade it to accept the escaped "[" and "]".
---------- Post updated at 16:45 ---------- Previous update was at 16:43 ----------
OK, got this one:
awk 'NR==FNR {R[$1]=$2; next} {for (r in R) gsub ("[[]"r"[]]", R[r]); print}' FS="=" file1 file2
iHere is my sample test file 1st_FILE.txt.
This will be replaced by 1st_FILE.txt.