我有大约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' {} \;
答案 0 :(得分:1)
如果要替换所有尾随小数,而不仅仅是以.0
结尾的小数,则可以使用此表达式。
sed 's/\.[[:digit:]]\+</</' /tmp/foo
如果你想删除.0,而不是其他小数,那么你可以更具体。例如:
sed 's/\.0</</' /tmp/foo
在这种情况下,它将从8.0中删除小数,但不会删除8.1。如果你想处理像“B.6”这样的情况,你可能需要做一些额外的调整。
答案 1 :(得分:0)
以下内容应该为您做到这一点
find /some/path -type f | xargs sed -i 's/\.0\(<\/rating>\)/\1/g'
将/some/path
替换为您要开始替换的基本目录的路径,如果所有文件都具有-name *.xml
命令,您可能还需要将find
添加到{{1}}命令中相同的后缀。
答案 2 :(得分: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'