Bash和脚本帮助生成具有可变内容文件 [英] Bash and Script help generating files with variable content
本文介绍了Bash和脚本帮助生成具有可变内容文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
扩展这个问题:<一href=\"http://stackoverflow.com/questions/8598741/how-to-create-several-files-from-a-list-in-a-text-file\">How在文本文件中创建从列表中几个文件?
摘要:
猫file_full_of_files_names | TR'\\ T'的'\\ n \\ n'|同时读取的文件名;做
如果测试-f$文件名;然后
回声跳\\$名\\,它已经存在
其他
CP -i initial_content$文件名
科幻
DONE
的伟大工程,为我想要什么,但我想扩展它。下面的内容是什么是'initial_content
发现 &LT;?XML版本=1.0编码=UTF-8&GT?;
&LT;选择的xmlns:机器人=http://schemas.android.com/apk/res/android&GT;
&LT;项目机器人:可绘制=@绘制/ com_aac_cachemate_demo_cachemate/&GT; &LT; /选择&GT;
我想更改
@绘制/XYZ
XYZ从
变量使用内容创建的文件的名称 initial_content
但与文件名填写了XYZ变量从
file_full_of_file_names
内容。
任何脚本小子?抨击?感谢您的帮助!
解决方案
使用 AWK
而不是 CP
:
猫file_full_of_files_names | TR'\\ T'的'\\ n \\ n'|同时读取的文件名;做
如果测试-f$文件名;然后
回声跳\\$名\\,它已经存在
其他
awk的-F/-v OFS =/-v NAME =$文件名'/@drawable/{sub(/.*/,name\"\\\"\",$2);print;next}1'&LT ; initial_content&gt;中$文件名科幻
DONE
测试:
jaypal:〜/温度]猫文件#示例文件
&LT; XML版本=1.0编码=UTF-8&GT?;
&LT;选择的xmlns:机器人=http://schemas.android.com/apk/res/android&GT;
&LT;项目机器人:可绘制=@绘制/ com_aac_cachemate_demo_cachemate/&GT; &LT; /选择&GT;[jaypal:〜/温度]回声$#名初始化的变量
名称[jaypal:〜/温度] awk的-F/-v OFS =/-v NAME =$文件名'/@drawable/{sub(/.*/,name\"\\\"\",$2);打印;接下来} 1'文件
&LT; XML版本=1.0编码=UTF-8&GT?;
&LT;选择的xmlns:机器人=http://schemas.android.com/apk/res/android&GT;
&LT;项目机器人:可绘制=@绘制/名/&GT; &LT; /选择&GT;
[jaypal:〜/温度]
[jaypal:〜/ Temp文件夹]文件名=jaypal#重新初始化变量[jaypal:〜/温度] awk的-F/-v OFS =/-v NAME =$文件名'/@drawable/{sub(/.*/,name\"\\\"\",$2);打印;接下来} 1'文件
&LT; XML版本=1.0编码=UTF-8&GT?;
&LT;选择的xmlns:机器人=http://schemas.android.com/apk/res/android&GT;
&LT;项目机器人:可绘制=@绘制/ jaypal/&GT; &LT; /选择&GT;
Extending this question: How to Create several files from a list in a text file?
Summary:
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
works great for what I want, but I'd like to extend it. The content below is what is found in '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>
I'd like to change the
@drawable/"XYZ"
XYZ variable to the name of the file created using the content from
initial_content
but with the XYZ variable filled in with the filenames from
file_full_of_file_names
content.
Any script kiddies? Bashers? Thanks for any help!
解决方案
Using AWK
instead of 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
Test:
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>
这篇关于Bash和脚本帮助生成具有可变内容文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文