我有以下文字
1012 - ABC-DEF
VIP
数
索引
诊断
变体
硬件
2017-06-19 14:41:28
我想在“1012 - ABC-DEF”和“2017-06-19 14:41:28”之间的每一行的开头追加“1012 - ABC-DEF”
所以结果将是:
1012 - ABC-DEF
1012 - ABC-DEF VIP
1012 - ABC-DEF编号
1012 - ABC-DEF指数
1012 - ABC-DEF诊断
1012 - ABC-DEF Variant
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'命令的RHS上无效的引用\ 1.)。
什么是自动填写参考“1012”的解决方案,甚至更好地自动填写参考“1012” - “ABC” - “DEF”
答案 0 :(得分:0)
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