2015-11-21 34 views
2

如何刪除sed中保留空間的第一行?sed:刪除保留空間的第一行?

我已經試過

x; 
s/.*\n//; 
x; 

.*\n匹配到最後的換行,刪除所有線路除了最後一個。

+0

你能告訴你爲什麼把它如果您想稍後刪除,請保留空間?它可能有助於找到最佳解決方案。 –

+1

任何時候使用術語「hold space」時都使用了錯誤的工具,因爲sed僅用於簡單替換單個行,並且除s,g和p(帶-n)的所有構造都在中期過時後, 20世紀70年代當awk被髮明時。發佈一些示例輸入和期望的輸出,並添加一個awk標籤,如果您需要幫助。 –

回答

1

這應該從 「保留空間」 除去一號線

x;s/[^\n]*\n// 

例子:

kent$ sed -n 'H;${x;p}' <(seq 3)  

1 
2 
3 

刪除第一個空行:

kent$ sed -n 'H;${x;s/[^\n]*\n//;p}' <(seq 3) 
1 
2 
3 
+0

'$ sed -n'H; $ {x; s/[^ \ n] * \ n //; p;}'<(seq 3)'給出了'3'。我認爲它將'[^ \ n]'解釋爲「不匹配'''''或'n'」。有什麼辦法可以繞過這個? – EpicOrange

+0

@EpicOrange Sed應該將'\ n'解釋爲單個換行符。但是,想要擺脫單一線條,你想完成什麼?也許你需要將文件讀入保持狀態(如果它適合),那麼只需搜索替換你想要刪除的行並將其交換出去。 –

+0

在上面的例子中,由於只使用了'H'命令,爲了達到相同的結果,刪除第一個字符('s /.//')是安全的。要刪除保留空間/模式空間中的第一行,那麼這是一個刪除零或多個非換行符的問題,後面跟着一個換行符('s/^ [^ \ n] * \ n //')。 – potong