-1

我有大约 5,000 个文件需要纠正错误。每个文件都有一个类似于以下内容的部分:

<rating system="nl-movies">16.0</rating>
<rating system="ro-movies">8.0</rating>

<rating *something*>A.0</rating>

我需要.0从每一个中删除 ,以便文本看起来像:

<rating system="nl-movies">16</rating>
<rating system="ro-movies">8</rating>

<rating *something*>A</rating>

换句话说,我需要替换.0</rating></rating>. 我将如何在 unix 中执行此操作并使更改沿文件夹结构递归?

感谢所有的帮助:这就是最终的工作:

find ./ -type f -name '*.xml' -exec sed -i 's/\.0<\/rating>/<\/rating>/g' {} \;
4

3 回答 3

1

替换所有尾随小数

如果要替换所有尾随小数,而不仅仅是以 结尾的小数,.0则可以使用此表达式。

sed 's/\.[[:digit:]]\+</</' /tmp/foo

仅替换 .0

如果您只想删除 .0 而不是其他小数,那么您可以更具体。例如:

sed 's/\.0</</' /tmp/foo

在这种情况下,它将从 8.0 中删除小数点,但不会从 8.1 中删除。如果你想处理像“B.6”这样的情况,你可能需要做一些额外的调整。

于 2012-08-14T18:48:14.310 回答
0

像下面这样的东西应该为你做这个

find /some/path -type f | xargs sed -i 's/\.0\(<\/rating>\)/\1/g'

替换为您要开始替换的基本目录的路径,如果所有文件都具有相同的后缀/some/path,您可能还想-name *.xml在命令中添加类似的内容。find

于 2012-08-14T18:52:19.450 回答
0

单个文件的安全解决方案是:

sed -ri 's/(<rating[^>]*>[^.<]+)\.0(<\/rating>)/\1\2/g' file.txt

对于目录中的多个文件/path

find /path -name *.txt | xargs sed -ri 's/(<rating[^>]*>[^.<]+)\.0(<\/rating>)/\1\2/g'
于 2012-08-14T19:10:56.240 回答