我正在尝试创建一个 .xml 文件,bash 命令需要复制此代码块,并从 city.txt 中替换 CITY-FROM-TEXT-FILE-LINE-1 属性(每行一个城市)
<ss:Row ss:Height ="22">
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">CITY-FROM-TEXT-FILE-LINE-1</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">CALIFORNIA</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">CA</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
</ss:Row>
答案1
template.xml
创建包含上述文本的文件
IFS=$(echo -en "\n\b") ; for C in `cat city.txt` ; do sed s/CITY-FROM-TEXT-FILE-LINE-1/$C/ template.xml ; done > cities.xml
使用的命令
cat
; 将文件连接到 STDOUTsed
;流编辑器
我们还使用标准 bash 的循环机制,并重定向到文件。
为了进一步阅读,我建议;
- 高级 bash 脚本指南(也适合初学者)
- 使用 grep、sed 和 awk 雕刻文本(介绍Unix上三个最有用的文本处理工具)
答案2
确实没有足够的信息来确切地知道你想要什么,但我会尝试猜测,这可能会有所帮助。如果你有一个名为的文件,cities.txt
其中包含:
xx
CITY-FROM-TEXT-FILE-LINE-1
CALIFORNIA
CA
xx
然后awk
对该输入运行命令:
awk 'BEGIN{print "<ss:Row ss:Height =\"22\">"}{printf " <ss:Cell>\n <ss:Data ss:Type=\"String\">%s</ss:Data>\n </ss:Cell>\n",$0}END{print "</ss:Row>"}' < cities.txt
那么你应该得到输出:
<ss:Row ss:Height ="22">
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">CITY-FROM-TEXT-FILE-LINE-1</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">CALIFORNIA</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">CA</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">xx</ss:Data>
</ss:Cell>
</ss:Row>
这可能无法直接回答您的问题,但希望可以为您提供一种(多种)可行的方法来帮助自己入门。