从列表或文件中查找单个字符串的每个实例并将其替换为另一个字符串

泰勒·琼斯(Tyler Jones):

我有一个大型XML文件,其中包含该字符串的多个实例REPLACEME在第二个文件中,我有一个字符串列表(包含逗号),例如:

58,-21,0
234,-38,0

我想REPLACEME用第二个文件中的一个值替换第一个文件中的每个实例,然后继续下一个实例。

我看过bash(sed,awk,perl)和Powershell。有人告诉我,我不应该使用循环,而应该使用文件循环并解析回文件。因此,我尝试了以下方法:

file2=/file2.txt
while IFS= read -r line; do
  printf '%s\n' "$line"
  sed '0,/REPLACEME/s//$line/' /file1.xml
done < "$file2"

但是它什么也没做。可能是因为XML文件包含符号吗?它没有错误,它什么也没做。

如果我能找到可以实现替换结果的东西,是否愿意完全放弃我的代码或切换解析器?

编辑:询问XML的示例。XML标记是KML文件的一部分,字符串是坐标点。下面的例子:

<Placemark>
    <name>5005</name>
        <MultiGeometry>
            <Polygon>
                -snip-
            </Polygon>
            <Point>
            <gx:drawOrder>1</gx:drawOrder>
                <coordinates>REPLACEME</coordinates>
            </Point>
        </MultiGeometry>
</Placemark>

该文件中有数百个此类条目,需要使用file2中列表中的相应坐标来填充。

埃德·莫顿(Ed Morton):

听起来您需要的是:

awk 'NR==FNR{a[NR]=$0; next} /REPLACEME/{sub(/REPLACEME/,a[++c])} 1' file2.txt file1.xml

通常的建议是在处理xml文件时使用诸如xmlstarlet或xmllint之类的可识别XML的工具,但我个人并不十分了解使用它们来解决此问题,恕我直言,假设所做的事情REPLACEME仅发生在您的工作中是没有必要的在示例中显示的上下文中。

当处理文本的最好的建议是不是“不使用循环”,它的“不使用外壳循环”,因此使用在这种情况下while循环也是一个不错的办法。请参阅为什么使用shell循环处理文本被认为是不好的做法

除了处理文本(例如,从文件中读取URL列表以运行curl)以外,还可以执行Shell循环,在这种情况下(也可以考虑xargs),然后应该避免for,请参见https:/ /mywiki.wooledge.org/DontReadLinesWithFor

由于sed脚本位于单引号内,因此sed '0,/REPLACEME/s//$line/'不允许$line扩展。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:从列表中查找与另一个字符串最接近的字符串

如何用webpack将一个字符串替换为另一个字符串?

如何在C ++中从输入中查找字符串并将其替换为另一个字符串?

检查句子中是否存在某些字符串,并使用Python 3.6将其替换为另一个字符串

Python:查找一个字符以检索要替换为另一个字符的字符串索引

使用C ++将一个字符串替换为另一个字符串

如何计算一个字符串的实例并将其替换为另一个字符串+当前计数器?

如何在字符串中获取子字符串并将其存储在另一个字符串中

计算一个字符串在另一个字符串中每个字符的出现次数

查找包含一个字符串但不包含另一个字符串的文件

如何在批处理脚本中查找字符串并将其替换为另一个字符串?

在java中,如何在字符串中查找单词并将其复制到另一个字符串变量中?

将at之后的字符串替换为另一个字符串

用字符串中的另一个字符替换“字符”

如何从终端用更多文件中的另一个字符串替换一个字符串?

查找一个字符串,并在找到第一个字符串后替换另一个字符串

用另一个字符串替换文件中的字符串

Bash-查找正则表达式并将其替换为另一个字符串

检测 URL 字符串中的特定字符并将其替换为另一个字符

是否可以在多个 mp3 文件的标题标签中搜索一个字符串并将其替换为另一个字符串?

用不包括模式的另一个字符串替换字符串中的一个字符

如何获取所有字符串并将其替换为数据库 JavaScript 中的另一个字符串

拆分字符串但替换为另一个字符串并获取列表

perl 或 sed 命令查找 2 个字符串并将第一个字符串替换为字符串 2

如何根据替换字符将一个字符串的值替换为另一个字符串?

如何从python列表中的字符串中选择一个字符并将其与单个字符进行比较?

如何从列表中获取字符串并将其与另一个字符串进行比较?

查找一个字符串中的一系列字符并将其与另一个字符串进行比较

如何使用shell脚本将变量中的字符串替换为文件中的另一个字符串