cronジョブは30分ごとに一時ファイルを生成し、次の出力を生成します。
---- kind=<data> field=<value> humankind=<data> kind=<data> field=<value> humankind=<data> kind=<data> field=<value> humankind=<data>
次のようにフォーマットしたいと思います。
---- kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
私は次のsed式を試しました。
sed -r 's|\s(kind=)|\n\1|g' /path/to/file
ただし、出力は次のようになります。
---- <------ The first line should be here
kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
kind=<data> field=<value> humankind=<data>
次の表現を使用してください。
sed -r 's|[^-]{4} (kind=)|\n\1|g' /path/to/file
目的の出力を生成しますが、奇妙に動作します。
---- kind=<data> field=<value> humankind=<incomplete data>
kind=<data> field=<value> humankind=<incomplete data>
kind=<data> field=<value> humankind=<incomplete data>
何らかの理由で、最後のフィールド(sed式で使用されたパターンの一部が含まれています)は、「不完全なデータ」の最初の2文字だけを印刷します。
私は何が間違っていましたか?
答え1
問題は、sed -r 's|\s(kind=)|\n\1|g' /path/to/file
すべての「種類」(最初の項目を含む)に対して新しい行を挿入して、後に追加の改行を取得することです----
。代わりに試してみてください。
sed -E 's|\s(kind=)|\n\1|2g' /path/to/file
最初のゲームをスキップするからです。
2番目は、データの一部である「kind」の前の4文字と一致するため失敗します(長さは6文字でなければなりません)!