以下は、「20」を「20」で閉じる必要がある行です。
2019-02-15T10:25:19+0100|ttt|werewrw|erewr|fddsfsdf|dfsdf|07|2ee7|1b65d04|"20|19|-02-|15t10:03|45435435|765767||SIP;rr=200;text="hyt"|
答え1
これをテストファイルとして試してみましょう。
$ cat text
start|10|"20|end
"10"|"20|"30"|end
"20|"10|"30|end
abc|def|"20"|30|"end
開いているすべての項目を閉じるには、"
以下を試してください。
$ sed -E 's/^("[^"|]*)\|/\1"|/; :a; s/(\|"[^"|]*)\|/\1"|/g; ta; s/\|"[^"|]*$/&"/' text
start|10|"20"|end
"10"|"20"|"30"|end
"20"|"10"|"30"|end
abc|def|"20"|30|"end"
どのように動作しますか?
閉じていない引用符が最初のフィールド、中間フィールド、または終了フィールドに表示される場合は、考慮する必要がある3つの状況があります。したがって、3つの代替コマンドがあります。
s/^("[^"|]*)\|/\1"|/
行が引用符で始まり、最初の引用符の前に引用符がない場合は、
|
引用符が追加されます。:a; s/(\|"[^"|]*)\|/\1"|/g; ta;
中間フィールドに引用符がない場合は、引用符が追加されます。不足している引用符がすべて追加されたことを確認するために、変更がなくなるまで置換コマンドが繰り返されます。
s/\|"[^"|]*$/&"/
最後のフィールドに閉じる引用符がない場合は、そのフィールドが追加されます。