我想從文件中刪除一個或多個特定的行號。我將如何使用sed來做到這一點?使用sed從文本文件中刪除特定的行號?
回答
如果你想通過10和12,刪除線5:
sed -e '5,10d;12d' file
這將結果打印到屏幕上。如果您想將結果保存到同一個文件:
sed -i.bak -e '5,10d;12d' file
這將備份文件多達file.bak
,並刪除指定的線路。
$ cat foo
1
2
3
4
5
$ sed -e '2d;4d' foo
1
3
5
$
和awk,以及
awk 'NR!~/^(5|10|25)$/' file
注意:這個awk行對於我來說比sed變種更加可靠(在OS-X和Ubuntu Linux之間) – 2012-02-23 19:13:30
請注意,這不會刪除文件中的任何內容。它只是將沒有這些行的文件打印到標準輸出。因此,您還需要將輸出重定向到臨時文件,然後移動臨時文件以替換原始文件。 – mivk 2015-06-05 09:00:35
我想提出使用awk的推廣。
當文件由固定大小 的塊和刪除重複每個塊的線製成, AWK可以以這樣的方式
awk '{nl=((NR-1)%2000)+1; if ((nl<714) || ((nl>1025)&&(nl<1029))) print $0}'
OriginFile.dat > MyOutputCuttedFile.dat
很好地工作。在這個例子中,尺寸爲塊是2000年,我想打印行[1..713]和[1026..1029]。
NR
是awk用來存儲當前行號的變量。%
給出了兩個整數除法的餘數(或模數)nl=((NR-1)%BLOCKSIZE)+1
這裏我們寫入變量nl當前塊內的行號。 (見下文)||
和&&
是邏輯運算OR和AND。print $0
寫全線
Why ((NR-1)%BLOCKSIZE)+1:
(NR-1) We need a shift of one because 1%3=1, 2%3=2, but 3%3=0.
+1 We add again 1 because we want to restore the desired order.
+-----+------+----------+------------+
| NR | NR%3 | (NR-1)%3 | (NR-1)%3+1 |
+-----+------+----------+------------+
| 1 | 1 | 0 | 1 |
| 2 | 2 | 1 | 2 |
| 3 | 0 | 2 | 3 |
| 4 | 1 | 0 | 1 |
+-----+------+----------+------------+
我很佩服你實現你瘋狂的名字的方式。 – 2015-04-23 08:09:54
您可以通過 sed的-i '33D' 文件
這與刪除其行號特定一行將刪除33行號碼上的行並保存更新的文件。
這通常是反模式的症狀。生成行號的工具可能會被替換爲立即刪除行的行。例如;
grep -nh error logfile | cut -d: -f1 | deletelines logfile
(其中deletelines
是您想象你需要的實用工具)是一樣的
grep -v error logfile
話雖如此,如果你是在一個情況下,你真的需要執行此任務,可以從行號文件生成一個簡單的sed
腳本。幽默(但也許稍微混淆),你可以用sed
來做到這一點。
sed 's%$%d%' linenumbers
此接受的行號,每行一個的一個文件,併產生,在標準輸出,與d
相同行號的每個後追加。這是一個有效sed
腳本,我們可以保存到一個文件,或者(在某些平臺上)管到另一個sed
例如:
sed 's%$%d%' linenumbers | sed -f - logfile
在某些平臺上,sed -f
不理解選項參數-
意味着標準輸入,因此必須將腳本重定向到臨時文件,並在完成後將其清理乾淨,或者如果您的操作系統(或外殼)具有該文件,則可以用/dev/stdin
或/proc/$pid/fd/1
替換單獨的短劃線。
與往常一樣,您可以在-f
選項之前添加-i
,以便sed
編輯目標文件,而不是在標準輸出上生成結果。在* BSDish平臺(包括OSX)上,您還需要提供一個明確的參數給-i
;一個常見的習慣用法是提供一個空洞的論據; -i ''
。
我不太同意「反模式的症狀」。基於標記的文件類型(例如XML或JSON)在最後需要特定的行才能成爲有效的文件。在這種情況下,通常是最合理的方法來刪除這些行,將想要添加的內容放入文件中,然後重新添加這些行,因爲將這些行直接放在一起可能會更加努力並且不利儘可能避免像sed這樣的額外工具。 – 2017-11-12 12:02:12
- 1. 使用Sed從文本文件中刪除一行
- 2. 使用sed從文本文件中刪除多個文件名
- 3. 從文本文件中刪除包含特定文本的行
- 4. 從文件中的行刪除特定字符串中使用的sed
- 5. 在bash腳本中使用sed從文件中刪除一行
- 6. 使用SED刪除文本
- 7. 如何使用python從文本中刪除特定的符號?
- 8. 從文件中刪除特定的行
- 9. 使用vb.net刪除文本文件中的特定行
- 10. 從Java中的文本文件中刪除特定行
- 11. 如何根據行號刪除(刪除)文本文件的特定行?
- 12. 使用sed從文件中刪除連續的特殊字符
- 13. 刪除從文本文件中的特定行
- 14. 批處理腳本 - 刪除從文本文件的特定行
- 15. 刪除文件中的特定符號
- 16. 從txt文件中刪除特定的行和一個符號
- 17. 使用ASP從文本文件中刪除選定的行?
- 18. 在Windows中使用sed從文本文件中刪除第一行
- 19. 從文本文件中刪除%符號
- 20. 從文本文件中刪除特定行
- 21. 從Java文本文件中刪除特定行?
- 22. 通過bash/awk/sed/perl刪除特定文本後的新行
- 23. 使用用戶輸入從分隔文本文件中刪除特定行。 (JAVA)
- 24. 用c刪除文本文件中的特定行#
- 25. 使用批處理腳本刪除文件中的特定行
- 26. 批處理腳本刪除文本文件中的特定行
- 27. vb腳本只刪除文本文件中的特定行
- 28. 如何使用python從文件中刪除特定的行?
- 29. 如何使用Linux命令(sed?)刪除文件中的特定行?
- 30. 如何從richTextBox中刪除/刪除特定文本行?
你可以舉一個你想要的更具體的例子嗎?你將如何決定刪除哪條線? – 2010-01-21 20:14:43
根據行號 – 2010-01-21 20:15:43