1

部分的に破損した JSON ファイルのデータベースがあります。何らかの理由でそれらを書いた人は、ファイルの最後に余分なコンマを含めました. これらのファイルは無数にあるため、修正する必要があります。これは次のようになります。

{
"foo": "bar",
"foo1": "bar1",
"foo2": "bar2",
}

そのため、sed コマンドを使用してコンマを削除しようとしています。今、私は sed 's|',\n}'|'\n}'|' を持っています しかし、それはファイルを変更していません。私は何を間違っていますか?

4

3 に答える 3

0

これは、OSX でも機能する sed ソリューションの 1 つです。

sed -e ':a' -e 'N; $!ba' -e 's/,\(\n}\)/\1/' file.json

別の方法として、次を使用して OSX に gnu-sed をインストールできます。

sudo brew install gnu-sed

そして実行します:

gsed -e ':a; N; $!ba; s/,\(\n}\)/\1/' file.json
于 2013-07-10T16:50:05.110 に答える
0

あなたはawkを試すことができます:

awk '{ if (/}/) sub(",$", "", last); if (last) print last; last=$0 } END { print last }'
于 2013-07-10T16:25:24.230 に答える
0

sedOS X に同梱されているのバージョンは\n、改行文字としてではなく、エスケープされた 'n' (通常の 'n' に縮小されます) として扱われます。を使用しているためbash、次のことを試すことができます。

sed $'s|,}|\\\n|' file.txt

は、特定のエスケープを特別に処理できる$'...'特殊なタイプの引用です。エスケープされたバックスラッシュの後に改行が続き、単一のエスケープされた改行文字として表されます。bash\\\nbashsed

更新:$検索テキストで改行文字の代わりに使用することを思い出した後、次の行でコマンドの後に中括弧が続くと一致しないことに気付きました(または、少なくとも、私の限られたコマンドの方法がわかりませんsed)。

于 2013-07-10T15:48:31.987 に答える