一致する行を一致する行の終わりの直後の行に移動します。

一致する行を一致する行の終わりの直後の行に移動します。

そのような入力があります。 job_typeの場合、*_jobの後の行を*_job行の末尾に移動し、ファイル全体を印刷する必要があります。次の行がjob_typeでない場合は印刷します。

SEDを介して* _jobを含む行のみを印刷できますが、ファイル全体を印刷することはできません。誰でも助けることができますか?

 sed -i -n '/.*_job: .*/{h}; /job_type.*/{H;x;s/\n/ /;p}'

入力する。

update_job: YUHG_GHT_FGT_BOX
job_type: box
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXXXXX
insert_job: TYYUH_JYUH_BOX
job_type: cmd
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX
insert_job: TYU_hju_poonj
job_type: CMD
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX

insert_job: YU_opoj_BOX job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX

insert_job: YU_opoj_BOX
job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX

予想O/P:-

update_job: YUHG_GHT_FGT_BOX job_type: box
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXXXXX
insert_job: TYYUH_JYUH_BOX job_type: cmd
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX
insert_job: TYU_hju_poonj job_type: CMD
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX

insert_job: YU_opoj_BOX job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX

insert_job: YU_opoj_BOX job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX

ベストアンサー1

あなたはできます:

sed '/_job/{N;/\
job_type/s/\
/ /;}' infile

行が含まれている場合は、拡張行を_job読み込み、パターンスペースN\n追加し、埋め込まれた改行文字を削除します(ここでは行をバックスラッシュに分解し、実際の改行を使用して\実際の改行を使用します)。job_type

おすすめ記事