Unix 中的字符串切割

Unix 中的字符串切割

我该如何转换这段文字?

输入文件格式:

MOD MAXT:TID=TID190,MT=VCU,MAXT=100;

所需的输出格式:

MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;

答案1

sed 'h;s/=[^,]*//gp;g;s/[^:,=]*=//g' <in >out

MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;

答案2

awk -F':|,|=' '{print $1":"$2","$4","$6"\n"$1":"$3","$5","$7}' FILE

我用“|”作为 FS 的 OR,所以基本上 awk 使用“:”或“,”或“=”将行分成多个组件(标记)。
现在我可以按任何顺序打印该行的任何部分,只需插入“\n”作为换行符即可添加第二行。

awk -F':|,|=' '{print $1":"$2","$4","$6"\n"$1":"$3","$5","$7}' <<< 'MOD MAXT:TID=TID190,MT=VCU,MAXT=100;' MOD MAXT:TID,MT,MAXT MOD MAXT:TID190,VCU,100;

答案3

珀里斯利:

perl -ne 'print /(.*:)/, join (",", /(\w+)=/g),"\n", /(.*:)/, join(",", /=([\w;]+)/g),"\n";'

我们使用默认模式匹配(例如当前行)并通过正则表达式选择捕获组。 (然后打印)

给出:

MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;

相关内容