シェル:中かっこ内の文字だけを変更しますか?

シェル:中かっこ内の文字だけを変更しますか?

次の書式設定行を含む大規模なファイルセットがあります。開いている中かっこと閉じている中かっこを含むスペースにのみ|文字を置き換える必要があります。{"USER":"AD","DESCRIPTION":"\"<some non english characters> |\n<some non english characters>","LINK":"sample"}したがって、次のテキストの場合

|||||samA|sam2||||{"USER":"AD","DESCRIPTION":"\"<some non english characters>  |\n<some non english characters>","LINK":"sample"}||||data|string|

出力は次のとおりです

|||||samA|sam2||||{"USER":"AD","DESCRIPTION":"\"<some non english characters>  \n<some non english characters>","LINK":"sample"}||||data|string|

私はこれを行うために数時間、さまざまなsed形式を試しましたが、まだ成功していません。私ができる方法はありますか?

ベストアンサー1

全体的に:

sed  '/{[^}]*|/{:a;s/\({[^}]*\)|\([^}]*}\)/\1 \2/;ta}'

簡単な説明:

/{[^}]*|/--変更を適用するパターンを含む行のみをフィルタリングします。 (実際にはこの部分は削除できますが、大容量ファイルの処理速度が速くなる可能性があります。)

:a;...;ta- 代替文が何も変更しないまで行を繰り返すループ。|中括弧が複数ある場合は、次のものが必要です。

s/\({[^}]*\)|\([^}]*}\)/\1 \2/;|内部中括弧を交換してください。一度に1。

おすすめ記事