SED插入匹配模式在图案之间的线条前面



我有以下文本

1012 -ABC -DEF

VIP

数字

索引

诊断

变体

硬件

2017-06-19 14:41:28

我想将" 1012-ABC-def"附加到两种模式之间的每一行的开头" 1012-ABC-DEF"one_answers" 2017-06-19 14:41:28"

,结果将是:

1012 -ABC -DEF

1012 -ABC -DEF VIP

1012 -ABC -DEF编号

1012 -ABC -DEF索引

1012 -ABC -DEF诊断

1012 -ABC -DEF变体

1012 -ABC -DEF硬件

2017-06-19 14:41:28

尽管我有解决方案,但我正在寻找一个更好的方法。

这是我的解决方案:

sed -i "/^([0-9][0-9][0-9][0-9]) - ABC-DEF/,/2017-([0-9][0-9])-([0-9][0-9]) ([0-9][0-9]):([0-9][0-9]):([0-9][0-9])/{/^([0-9][0-9][0-9][0-9]) - ABC-DEF/n;/2017-([0-9][0-9])-([0-9][0-9]) ([0-9][0-9]):([0-9][0-9]):([0-9][0-9])/!{s/^/1012 - ABC-DEF /g}}" *

我想要的是,如果文本与" 1012 -ABC -DEF"匹配,则应自动填充在{s/^/1012 -abc -def/g}}}}}"我认为解决方案将是{s/^/ 1 -abc -def/g}}}",但这给出了一个错误(``s's'命令的rhs上的无效参考 1)。

什么是自动填充" 1012"的解决方案,甚至更好地填充参考文献" 1012" - " ABC" - " DEF"自动

awk '/^[0-9]{4} - ABC-DEF/{p=$0;print;next}
     /^[0-9]{4}-[0-9]{2}-/{p=""}$0=(p?p" ":"") $0' file

这个单线读取2012-ABC-DEF行并将其放在所有行的开头直到2017-...(date)行。

一个小测试:

kent$  cat f
foo
foo
1012 - ABC-DEF
VIP
Number
Index
Diagnosis
Variant
Hardware
2017-06-19 14:41:28
foo
foo
kent$  awk '/^[0-9]{4} - ABC-DEF/{p=$0;print;next}/^[0-9]{4}-[0-9]{2}-/{p=""}$0=(p?p" ":"") $0' f
foo
foo
1012 - ABC-DEF
1012 - ABC-DEF VIP
1012 - ABC-DEF Number
1012 - ABC-DEF Index
1012 - ABC-DEF Diagnosis
1012 - ABC-DEF Variant
1012 - ABC-DEF Hardware
2017-06-19 14:41:28
foo
foo

相关内容

最新更新