![如何在 bash 中组合 awk 和 sed 命令](https://linux22.com/image/175251/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E4%B8%AD%E7%BB%84%E5%90%88%20awk%20%E5%92%8C%20sed%20%E5%91%BD%E4%BB%A4.png)
我有一个包含三个字段名称、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 "
并以 结尾"
。