0

扩展这个问题:如何从文本文件中的列表创建多个文件?

概括:

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

内容。

有脚本小子吗?抨击者?谢谢你的帮助!

4

1 回答 1

1

使用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>
于 2011-12-22T03:28:40.613 回答