Text-Processing

在匹配模式後將該行拆分為下一行

  • May 13, 2022

在下面顯示的輸入文件中,我試圖找到字元串job_type並將其移動到下一行,如果它與 job_type 匹配。

我試過這個,但它不工作:

sed "s/[A-Z][a-z]*job_type:/\njob_type:/g"

輸入:

   insert_job: VAU_vaultnotification_ertgvfg_job job_type: xxx 
   insert_job: VAU_vaultnotification_ertgvfg_frd job_type: yyy 
   insert_job: VAU_vaultnotification_ertgvfg_erb job_type: SXC 
    job_type: CMD
   insert_job: VAU_vaultnotification_ertgvfg_frd job_type: YUI 

預期輸出:

insert_job: VAU_vaultnotification_ertgvfg_job 
job_type: xxx 
insert_job: VAU_vaultnotification_ertgvfg_frd 
job_type: yyy 
insert_job: VAU_vaultnotification_ertgvfg_erb 
job_type: SXC 
job_type: CMD
insert_job: VAU_vaultnotification_ertgvfg_frd 
job_type: YUI 

我不清楚您的要求,但也許您想要:

sed 's/\([[:upper:]][[:alpha:]_]*\)[[:space:]]\{1,\}\(job_type:\)/\1\
\2/g'

或者:

perl -Mopen=locale -pe 's/\b\p{Lu}\w*\K\s+(job_type:)/\n$1/g'

我會使用 GNU 做類似的事情sed

sed '/insert_job/s/job_type/\njob_type/'

第一部分/insert_job/在進行替換之前匹配一行。如果找不到“insert_job”(或您喜歡的任何正則表達式),它將不會進行替換。

引用自:https://unix.stackexchange.com/questions/702265