我想在我的文件中删除所有空白段。
空段可以由一对以START
开头并以END
开头的连续行指定。有效段将在以START开头并以END
示例输入
Header
START arguments
END
Any contents
START arguments
...
something
...
END
Footer
所需输出
Header
Any contents
START arguments
...
something
...
END
Footer
我在这里寻找可能的一个衬垫。任何帮助将不胜感激。
试验
我尝试了awk
。它在某种程度上起作用,但即使在有效的段中它也会删除START行。
awk '/^START/ && getline && /^END$/ {next} 1' file
答案 0 :(得分:3)
perl -00 -pe 's/START .*?\nEND//g' file
这是一个更好的。 如果没有用空行分隔,我之前给出的解决方案将丢弃整个段落。
下面的早期回复:
这个perl one liner怎么样?
perl -00 -ne 'print if not /START .*\nEND/' file
段落模式下的读入文件并丢弃与START <string><newline>END
答案 1 :(得分:3)
与此同时,人们提出了很好的解决方案,我使用sed
sed '/^START/N;/^START.*END$/d' file
或者按照 @jthill
的建议sed '/^START/N; /\nEND$/d' file
答案 2 :(得分:2)
也许以下内容会有所帮助:
perl -ne 'print /^START/?do{$x=<>;$_,$x if $x!~/^END/}:$_' inFile
数据集输出:
Header
Any contents
START arguments
...
something
...
END
Footer
答案 3 :(得分:2)
awk -v RS='START[^\n]*\nEND\n' '{printf "%s", $0}' file.txt
答案 4 :(得分:1)
/^START/ {
startline=$0
next
}
/^END$/ && startline {
startline=""
next
}
startline {
print startline
}
startline=""
1
答案 5 :(得分:1)
$ awk '{rec = rec $0 RS} END{ gsub(/START[^\n]*\nEND\n/,"",rec); printf "%s", rec }' file
Header
Any contents
START arguments
...
something
...
END
Footer