从Linux中的许多文件中删除DOS文件结束字符

时间:2016-11-22 17:05:27

标签: linux svg sed grep find

我将数百万生成的​​SVG文件从DOS转移到Linux盒子,并且意识到每个文件的最后一个字符(文件字符的DOS结尾)都有^ @,当我尝试显示时出错浏览器中的SVG文件。

在这个问题中: How can I remove the last character of the last line of a file?

Maroun给出了解决方案:

sed '$ s/.$//' your_file

但是当我修改它时看起来像这样:

sed '$ s/.$//' *.SVG

find . -print | grep .SVG | sed '$ s/.$//'

它不起作用。

我还希望能够指定它只应删除最后一个字符,如果它是^ @。

有人可以告诉我我做错了什么或如何让它发挥作用。 SVG文件位于数千个子目录中,因此我需要能够从树结构的顶部到底部进行更改。

1 个答案:

答案 0 :(得分:1)

我猜测你的第一个例子不起作用,因为它只采用*.SVG扩展的最后一个文件。第二个示例(带有find命令的示例)失败,因为您将查找的输出传递给sed而不是文件内容。

另外,如果你想更改文件'使用sed的内容,您需要使用-i,以便执行更改"到位"。

你可以试试这个:

for file in *.SVG
do
    sed -i '$ s/.$//' $file
done

或者:

find . -name "*.SVG" -exec sed -i '$ s/.$//' {} \;