2011-06-24 121 views
1
sed -n '$'!p abc.txt | tail +2 > def.txt 

我在我的代碼上述sed命令 - 我無法弄清楚它做什麼 - 我正在參加SED教程它找出來,但我不能 - 可不可以有一個人請幫我找出它做什麼 - 感謝UNIX的sed命令的幫助

+0

你有沒有理解它的任何部分,以便我們可以專注於其餘部分? – Beta

+0

我想要的細節,直到管道 ​​- 我沒事休息 - 基本上我想要sed的細節,我也發現了sed與-n不打印 - 我不知道剩下的'$'和!p – user549432

+1

正如答案的補充:您可以使用(可以說是)清理刪除命令獲得相同的結果:'sed'$ d'file' – mhyfritz

回答

2

採取這種分階段:「運行abc.txt通過sed的,但不打印任何東西去」

sed -n abc.txt  

sed -n '$!p' abc.txt 

(請注意,我已經糾正了我的想法是放錯位置的引號。)

「通過sed的運行abc.txt;如果行不是最後一行,打印(即打印所有但最後一行)。「

我猜你知道其餘的,但注意tail +2是陳舊的語法 - tail -n 2會更好。

編輯:

要刪除的最後兩行,嘗試

sed 'N;$d' 

,或者如果不工作,原油,但有效:

sed '$d' | sed '$d' 
+1

'tail -n 2'對於GNU更好。例如,SunOS 5.10將需要'tail + 2'。 – Johnsyweb

+0

@Johnsyweb:謝謝,我不知道。 – Beta

+0

我使用下面的sed命令來打印除了最後兩行Cna之外的所有文件,你可以驗證它是否正確sed'N; $!P; $!D; $ d' – user549432

2

至於sed指令'$'!p關注:

  • $只匹配輸入文件的最後一行。
  • !否定了匹配的意義(所以它匹配所有但最後一行是)。
  • p打印出任何匹配的內容。

所以基本上這隻打印文件的最後一行。

-n選項將停止sed執行其默認操作(打印模式空間) - 如果沒有這種情況,您將獲得最後一行的一個副本和所有其他行的兩個副本。

各地$的報價是從試圖把它解釋爲一個shell變量停止殼 - 我會引用很多我自己('$!p'),但是這是一個風格問題,至少在bash。其他外殼如csh(其使用!進行命令歷史檢索)可能不會如此寬容。

+2

我認爲這不僅僅是一個樣式問題 - 我知道的大部分炮彈都會對這個'!!'產生強烈的意見。 – Beta

+0

@貝塔,好點,特別是因爲這個問題沒有標籤'bash'。我會添加一個片段來說明這一點。 – paxdiablo

+0

我使用下面的sed命令來打印除了最後2行之外的所有Cna,你可以驗證它是否可以sed'N; $!P; $!D; $ d' – user549432