如何使用sed
?sed:删除以标记结尾的空白行
Input: Expected output:
1 | 1
2 MARKER | 2 MARKER
| 3 MARKER
| 4
|
| 5 MARKER
| 6
|
3 MARKER |
| 7 MARKER
4 | 8
| 9
5 MARKER |
6 |
|
|
7 MARKER |
|
8 |
9 |
首先我试过这个:它不工作因为“#niether t或b工作,因为d导致脚本中断。”
/MARKER$/ {
# i -- Line with MARKER
:my_branch
# i -- in branch
# write current patt space to output and read next line to pattern space
n
# if non blank goto EO script
/^$/! b
# if blank line delete it
/^$/ d
# loop back for more blank lines.
t my_branch
# niether t or b work because d causes the script to break.
b my_branch
}
然后我尝试这样做,这几乎工作的:((( - 它不删除3和4之间的线路,我认为这是因为3的2的处理过程中被消耗,因此它的标记错过
/MARKER$/ {
# i -- Line with MARKER
:my_branch
# i -- in branch
N
s/MARKER\n/MARKER/
t my_branch
# I added the following but it doesn't help..
/MARKER$/ b my_branch
}
还有其他版本4-5我试过,但没有工作
我所做的这一切,因为我试图回答这个问题:。replace two newlines to one in shell command line,所以我开始学习http://sed.sourceforge.net/sed1line.txt sed和http://www.grymoire.com/Unix/Sed.html
IOW我知道有使用awk,perl等的解决方案,但我只是想学习使用sed。
谢谢。
我不明白你正在试图创造的转型。为什么在输出中仍然留有空行(仅供学习?)您能告诉我们您正在尝试实施的规则吗?否则非常好发布。感谢您列入您已经阅读并知道的内容!祝你好运。 – shellter
对不起,没有看到那里的表扬。也许你错过了整个问题的标题。 :)如果您注意到,以“MARKER”结尾的行前面的空行将被删除。其他空白行不应被删除。 – Kashyap