-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

単一のファイルの安全な解決策は次のとおりです。

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 に答える
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 に答える