我们怎么能用awk做到这一点?
输入文件
Line 1
Line 2
####PATTERN####### (Line 3)
Line 4
Line 5
Line 6
####PATTERN####### (line 7)
Line 8
####PATTERN####### (Line 9)
等。
输出文件
Line 1
Line 3
Line 4
Line 5
Line 7
Line 9
答案 0 :(得分:2)
sed '$!N;s/.*####PATTERN####### \(.*\)/\1/;P;D' text
Line 1
(Line 3)
Line 4
Line 5
(line 7)
(Line 9)
N
命令从输入到模式空间中抓取下一行,以便我们可以对两行执行模式匹配。如果我们在中间发现####PATTERN######
,我们只保留第二部分,以便删除上一行。 P
命令打印结果模式。
答案 1 :(得分:2)
sed的代码:
sed -nr '/####PATTERN#######/!{x;1!p;x};$p;h' file
$ sed -nr '/####PATTERN#######/!{x;1!p;x};$p;h' file Line 1 ####PATTERN####### (Line 3) Line 4 Line 5 ####PATTERN####### (line 7) ####PATTERN####### (Line 9)
GNU代码awk:
awk '{if ($0 ~ /PATTERN/ && NR>1) {delete l[(NR-1)]}; l[NR]=$0}END {for (a in l) print l[a]}' file
$ awk '{if ($0 ~ /PATTERN/ && NR>1) {delete l[(NR-1)]}; l[NR]=$0}END {for (a in l) print l[a]}' file Line 1 ####PATTERN####### (Line 3) Line 4 Line 5 ####PATTERN####### (line 7) ####PATTERN####### (Line 9)
答案 2 :(得分:1)
以下是awk
的一种方式:
awk '/PATTERN/{for(;i<NR-2;)print lines[++i];i=NR;delete lines;print $0}{lines[NR]=$0}' file
$ cat file
Line 1
Line 2
####PATTERN####### (Line 3)
Line 4
Line 5
Line 6
####PATTERN####### (line 7)
Line 8
####PATTERN####### (Line 9)
$ awk '/PATTERN/{for(;i<NR-2;)print lines[++i];i=NR;delete lines;print $0}{lines[NR]=$0}' file
Line 1
####PATTERN####### (Line 3)
Line 4
Line 5
####PATTERN####### (line 7)
####PATTERN####### (Line 9)