如何使用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