在来自文件读取的字符串的开头和底部附加一些字符串

在来自文件读取的字符串的开头和底部附加一些字符串

我正在编写一个 shell 脚本,它从另一个程序获取数据,我使用该变量值从文件中读取内容,并在开始和底部的这些数据中附加一些内容:

下面是一个例子:

readonly file_location=$location
readonly client_id = $id
readonly client_types = $type_of_client

这里 $location、$id 和 $type_of_client 值是从另一个程序传递的。下面是一个例子:

  • $location 将是完整路径名,如下所示: /home/david/data/12345678
  • $id 将是数字:120
  • $type_of_client 将以空格分隔的单词:abc def pqr

现在,在这个位置中,/home/david/data/12345678我有这样的文件:abc_lop.xmldef_lop.xmlpqr_lop.xml.含义_lop.xml始终相同,因此我们可以对其进行硬编码。我们现在只需要迭代client_types变量并创建一个如上所示的文件名,然后将整个文件读入字符串(或者如果有其他更好的方法,也可能是这样)。我的工作如下所示:

#!/bin/bash

readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client

for word in $client_types
do
    echo $word
    file_value=`cat "file_location"/"$word"_lop.xml`
    echo $file_value
done

现在我需要做一些特殊的事情,比如在 shell 脚本中进行字符串操作,但我不知道如何做到这一点。现在,无论我们从这些文件中读取什么值,我都需要在我们正在读取的所有文件的顶部和底部附加一些内容。我需要做完全相同的事情,如下所示:

例如:如果abc_lop.xml我们使用以下命令查看文件后,它是这样的vi

<Hello version="100">

<!-- some stuff here -->

</Hello>

我需要把它做成这样:

<hello_function>
<name>Data</name>
<Hello version="100">

<!-- some stuff here -->

</Hello>
</hello_function>

如您所见,我将其添加到顶部<hello_function><name>Data</name>,并将其添加到底部</hello_function>。我们如何在 shell 脚本中做到这一点?

所以一般来说echo $file_value应该打印出上面每个附加值client_types

#!/bin/bash

readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client

for word in $client_types
do
    echo $word
    file_value=`cat "file_location"/"$word"_lop.xml`
    // may be do something here?
    echo $file_value // this should print out appended string value both at top and bottom.
done

每个 XML 文件肯定会小于 10MB。

答案1

如果您所做的只是输出数据,则无需读取变量。对于您的主循环:

for word in $client_types; do
    echo "$word"
    echo '<hello_function>'
    echo '<name>Data</name>'
    cat "$file_location/${word}_lop.xml"
    echo '</hello_function>'
done

当然,这会输出所有修改文件的串联,以后可能很难分开。但它有效。

编辑:要输出到单独的文件:

for word in $client_types; do
    fn="${word}"_new.xml
    echo "$word"
    echo '<hello_function>' >>"$fn"
    echo '<name>Data</name>' >>"$fn"
    cat "$file_location/${word}_lop.xml" >>"$fn"
    echo '</hello_function>' >>"$fn"
done

当然,这取决于您想要在每个文件中包含什么内容。

相关内容