gpt4 book ai didi

xml - 使用sed命令删除xml文件中的特殊字符

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:33 24 4
gpt4 key购买 nike

我正在尝试使用以下方法替换 XML 文件中的特殊字符 (.):

 find . -type f -name "*.XML" -exec sed -e 's/\.//g' {} +

我的文件内容如下,字符串值是动态的或重复的。它必须专门搜索并替换忽略特殊字符的内容。

示例 1:

<TotalSum>1000.01</TotalSum><Info><Value>DDAB.A1234 1000.01</Value></Info>

输出应该是

<TotalSum>1000.01</TotalSum><Info><Value>DDABA1234 1000 01</Value></Info>

示例 2:

<TotalSum>300.89</TotalSum><Info><Value>A.1234567 100.14 B.1234567 200.75</Value></Info>

输出应该是

<TotalSum>300.89</TotalSum><Info><Value>A1234567 100 14 B1234567 200 75</Value></Info>

我试图执行的脚本如下所示,因为我只需要从 <Value> 字段中删除特殊字符:

$search_text=`grep -i Value filename`
for i in $search_text
do
sed -e 's/\.//g'
done

最佳答案

使用 GNU sed 使用扩展的正则表达式:

sed -r '
:del
s#(<Value>.*[[:digit:]])\.(.*</Value>)#\1 \2#
s#(<Value>.*[[:alpha:]])\.(.*</Value>)#\1\2#
tdel
' file

或作为单行:

sed -r ':del; s#(<Value>.*[[:digit:]])\.(.*</Value>)#\1 \2#; s#(<Value>.*[[:alpha:]])\.(.*</Value>)#\1\2#; t del' file
  • -r用于扩展正则表达式。这只是为了方便,否则你将不得不使用 \( ... \)
  • s#text#replacement#为了方便起见,您也可以选择不同的分隔符。那么就不需要转义文字 /
  • :del是标签的定义
  • ( )保存以后可以使用的匹配项back-referenced使用 \1 , \2 , ...
  • tdel跳转到标签 :del如果s命令更改了行。这是为了确保所有的点都被替换

sed不适用于多个 <Value>基本正则表达式和扩展正则表达式在同一行的标签不支持非贪婪匹配。我建议使用 perl或一些 XML 感知工具。

关于xml - 使用sed命令删除xml文件中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com