如何在 bash 中组合 awk 和 sed 命令

如何在 bash 中组合 awk 和 sed 命令

我有一个包含三个字段名称、Rev_ration 和同步的文件,其中:(用冒号分隔),如下所示:

##Increase 
JOe:4.8:7

##Check as per revision 67
jonny:[5:9]:[7:0]
##Check as per revision 56
Salman:q[0:234]:5

最初我将方括号中的 : 替换为 !。其次执行我的 AWK。第三,我要替换!它位于方括号中:我正在尝试下面的代码:

#!/bin/bash
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t5 >> t6
awk -F: '/^$/ /^#/ {c=$0; sub(/#+/,"", c); next} 
                {print $1,$2,"- message", "\"" c "\""}' t6 >> t7
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t7 >> t8

Getting syntax error

上面的代码工作正常,但无法忽略空行

我需要删除输入文件中的空行。

所需输出

JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]: - message "Check as per revision 56"

如何组合所有三个命令以及如何摆脱空行..如何使用上面显示的代码修复该问题

答案1

由于您似乎实际上并未对:- 分隔字段执行任何操作,因此我们可能会专注于以 开头的行##,从中挑选出文本,并将文本插入到以下行中。

仅使用sed

$ sed '/^$/d; /^##/{ s///; h; d; }; G; s/\n\(.*\)/ - message "\1"/' file
JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]:5 - message "Check as per revision 56"

sed表达式删除带有 的空行/^$/d。然后,它将之后的任何文本保存##到保留空间中h(删除初始的 后##,替换可能已存储在保留空间中的任何内容)。对于任何其他非空行或以 开头的行##,它将附加保留空间中的文本G并对其进行修改,以便添加的文本以 为前缀- message "并以 结尾"

相关内容