Command-Line

刪除輸入中前 N 行的命令

  • December 31, 2015

背景

我正在執行一個 SSH 伺服器,並且有我想要刪除的這個使用者。我無法刪除此使用者,因為他目前正在執行一些我需要先終止的程序。

這是我目前使用的管道,用於找出我目前使用的使用者的所有程序 ID:

ps -u user | awk '{print $1;}'

輸出如下所示:

PID
2121
2122
2124
2125
2369
2370

我想通過管道kill -9來殺死所有程序,這樣我就可以像這樣刪除這個愚蠢的使用者:

ps -u user | awk '{print $1;}' | sudo xargs kill -9

但這不起作用,因為PID標題:

kill: failed to parse argument: 'PID'

問題

我在想必須有一個簡單的 Unix 命令來刪除第一行輸入。

我知道我可以使用tail它,但我不想計算輸入包含多少行來確定我想要顯示多少行。

我正在尋找類似headtail倒置的東西(而不是顯示流的第一個/最後一部分,它顯示除了流的開始/結束之外的所有內容)。

筆記

我設法通過簡單地在命令| grep [[:digit:]]後添加來解決這個問題,awk但我仍在尋找一種方法來刪除文件的第一行,因為我認為在其他情況下會非常有用。

注意:如果您的系統已經有pgrep/pkill那麼您在這裡重新發明輪子。如果您的系統沒有這些實用程序,那麼您應該能夠格式化輸出ps以直接獲取未佔用的 PID 列表,例如ps -u user -opid=

如果您已經在使用awk,則無需通過額外的流程來刪除第一行(記錄):只需在記錄號上添加一個條件NR

ps -u user | awk 'NR>1{print $1;}'

既然您提到headand tail,在這種情況下您可能想要的公式是tail -n +2

引用自:https://unix.stackexchange.com/questions/252503