2016-11-22 12 views
0

DOSからLinuxのボックスに数百万の生成されたSVGファイルを転送し、各ファイルの最後の文字として^ @ )SVGファイルをブラウザに表示しようとするとエラーが発生します。この質問にLinuxの多くのファイルからDOSファイルの終わりを削除する

sed '$ s/.$//' your_file 

しかし、私はこのように見て、それを修正します:

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

または

find . -print | grep .SVG | sed '$ s/.$//' 
How can I remove the last character of the last line of a file?

Marounのようにソリューションを提供します

動作しません。

また、最後の文字が^ @の場合にのみ削除するように指定することもできます。

私が間違ってやっていることや、これを動作させる方法を教えてもらえますか? SVGファイルは何千ものサブディレクトリにありますので、ツリー構造の上から下に変更する必要があります。

+0

を参照してください:[?私はディレクトリ全体にDOS2UNIXを実行するにはどうすればよい](http://stackoverflow.com/q/11929461/3776858) – Cyrus

答えて

1

最後のファイルが*.SVGで展開されているため、最初の例が機能していないと思います。 findの出力をファイルの内容の代わりにsedに渡すので、2番目の例(findコマンドの例)は失敗します。

sedでファイルの内容を変更する場合は、-iを使用する必要がありますので、変更は「インプレース」で実行されます。

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

または::

あなたはこれを試みることができる

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

Alvaro最後の文字が^ @の場合にのみコマンドを動作させるにはどうすればよいですか? – Andrew

+0

2番目の$の前のピリオドまで、ctrl-v ctrl-mのピリオドの後に続けて$で入力を続けます。これは、行の最後の文字としてdos行末に一致する必要があります –

+0

だから、それは:見つける。 -name "* .SVG" -exec sed -i '$ s /.^ v^m $ //' {} \; これをbashで試してみました。ちょうど^ Mをその場に入れました(。^ M $)。しかし、ファイル文字のDOS終了は^ @です。^@をどうすれば入手できますか?私は^ v^@を試みましたが、何も起こりませんでした。 – Andrew

関連する問題