最後の行を除くすべての行の末尾にカンマを追加するにはどうすればいいですか? 質問する

最後の行を除くすべての行の末尾にカンマを追加するにはどうすればいいですか? 質問する

この種のファイルの最後の行を除くすべての行の末尾にコンマを追加したいと思います。

私は今これを持っています:

{...}
{...}
{...}
{...}

これ欲しい:

{...},
{...},
{...},
{...}

コマンドラインでこれを行うにはどうすればよいですか? sed コマンドで可能ですか?

ベストアンサー1

次のスクリプトには、最後ではない行に一致するsedアドレス式と、行末の次にコンマを追加する置換アクションがあります。$!s/$/,/

sed '$!s/$/,/' file

$アドレス内の は最後のライン正規表現の置換では$最後の文字位置各行に 2 つあります。これらは無関係ですが、ある意味では似ています。

これは、変更された内容をfile標準出力に出力します。別のファイルにリダイレクトしてファイルに保存するか、sed -iがサポートしている場合はを使用しますsed。(一部のバリアントでは、オプションに空の引数が必要です-i。特に *BSD / OSX sed)。

有効な JSON を、有効でない JSON から生成することがタスクである場合、私はこのアプローチに懐疑的です。構造化形式は、基本的な行指向ツールではなく、構造化形式を理解するツールで操作する必要があります。ただし、これが行指向データを適切な JSON に変換するのに役立つ場合は、おそらく有効な使用法です。

... 後から考えてみると、出力も角括弧で囲むといいかもしれません。そうすれば、技術的には有効な JSON になります (各行がそれ自体有効な JSON フラグメントであると仮定)。

sed '1s/^/[/;$!s/$/,/;$s/$/]/' file

最初の行(アドレス式1)では、行頭の角括弧(s/^/[/)に代入します。最後の行以外の行では、上記のように末尾にカンマを追加します。最後の (アドレス式$) 行末に閉じ角括弧 ( s/$/]/) を追加します。セミコロンよりも改行を好む場合は、それで問題ありません。多くのsed方言では、これを複数の引数に分割することもできます-e

おすすめ記事