Bash и Script помогают создавать файлы с переменным содержимым - PullRequest
0 голосов
/ 22 декабря 2011

Расширение этого вопроса: Как создать несколько файлов из списка в текстовом файле?

Резюме:

cat file_full_of_files_names | tr ' \t' '\n\n' | while read filename; do
if test -f "$filename"; then
echo "Skipping \"$filename\", it already exists"
else
   cp -i initial_content "$filename"
fi
done

отлично работает для того, что я хочу,но я бы хотел расширить его.Содержимое ниже - это то, что находится в 'initial_content'

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/com_aac_cachemate_demo_cachemate" /> </selector>

. Я бы хотел изменить переменную

@drawable/"XYZ"

XYZ на имя файла, созданного с использованием содержимого из

initial_content

но с переменной XYZ, заполненной именами файлов из

file_full_of_file_names

content.

Есть какие-нибудь сценарии?Извилины?Спасибо за любую помощь!

1 Ответ

1 голос
/ 22 декабря 2011

Использование AWK вместо cp:

cat file_full_of_files_names | tr ' \t' '\n\n' | while read filename; do
if test -f "$filename"; then
echo "Skipping \"$filename\", it already exists"
else
   awk -F"/" -v OFS="/" -v name="$filename" '/@drawable/{sub(/.*/,name"\"",$2);print;next}1' < initial_content > "$filename"

fi
done

Тест:

jaypal:~/Temp] cat file # Sample File
<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/com_aac_cachemate_demo_cachemate" /> </selector>

[jaypal:~/Temp] echo $filename # Variable Initialization
name

[jaypal:~/Temp]  awk -F"/" -v OFS="/" -v name="$filename" '/@drawable/{sub(/.*/,name"\"",$2);print;next}1' file
<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/name"/> </selector>
[jaypal:~/Temp] 


[jaypal:~/Temp] filename="jaypal" # Re-initializing variable

[jaypal:~/Temp]  awk -F"/" -v OFS="/" -v name="$filename" '/@drawable/{sub(/.*/,name"\"",$2);print;next}1' file
<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/jaypal"/> </selector>
...