この種類のファイルのすべての行の最後に、最後の行を除いてコンマを追加します。
私は今これを持っています:
{...}
{...}
{...}
{...}
これ欲しい:
{...},
{...},
{...},
{...}
コマンドラインでどうすればいいですか? sedコマンドで可能ですか?
次のsed
スクリプトには、最後ではない行に一致するアドレス式$!
と、行末の隣にコンマを追加する置換アクションs/$/,/
があります。
sed '$!s/$/,/' file
(アドレスの$
は最後の行を参照し、置換の正規表現の$
は最後の文字位置を参照します何らかの意味で似ていますが、それらは無関係です。)
これにより、file
の変更内容が標準出力に出力されます。別のファイルにリダイレクトしてファイルに保存するか、sed
がサポートしている場合はsed -i
を使用します。 (一部のバリアントでは、-i
オプションへの空の引数、特に* BSD/OSX sed
が必要です。)
あなたの仕事がそうでないものから有効なJSONを生成することであるなら、私はこのアプローチに懐疑的です。構造化フォーマットは、基本的な行指向ツールではなく、構造化フォーマットを理解するツールで操作する必要があります。ただし、これが行指向のデータを適切なJSONに変換するのに役立つ場合は、おそらく有効な使用方法です。
...後から考えてみると、出力も角括弧で囲む必要があるかもしれません。その後、実際には技術的に有効なJSONです(各行がそれ自体で有効なJSONフラグメントであると仮定します)。
sed '1s/^/[/;$!s/$/,/;$s/$/]/' file
最初の行(アドレス式1
)で、行の先頭の開き角括弧(s/^/[/
)に置き換えます。最後ではない行に、上記のように末尾のコンマを追加します。 is最後の行(アドレス式$
)で、行の終わりに閉じ角括弧(s/$/]/
)を追加します。セミコロンよりも改行を好むなら、それで問題ありません。多くのsed
方言では、これを複数の-e
引数に分割することもできます。
シンプルに、awkを使用してください:
$ awk '{printf "%s%s",sep,$0; sep=",\n"} END{print ""}' file
{...},
{...},
{...},
{...}