我試過sed -i '/^/d' myfile
並刪除了整個文件。如何避免這種情況?我想刪除其中包含^
的所有行。刪除所有包含插入符號的行(^)
回答
sed -i '/\^/d' myfile
您需要轉義^
特殊字符。
在正則表達式中,「特殊」字符在括號表達式(方括號)內存在時會失去其特殊含義。所以你會認爲搜索[^]
將是你需要的。
唉,事實證明,雖然這適用於脫字符號,但脫字符號在括號表達式的第一個字符時會獲得不同的特殊含義。它用於否定表達式。所以[^]
實際上是無效的正則表達式語法,並且這個字符仍然需要被轉義。
你在找什麼,在GNU sed的,可能看起來像:
sed -i '/[\^]/d' myfile
這看起來很笨拙(特別是與@ threadp的答案),但我更喜歡方括號的方式來逃避特價因爲它以同樣的方式處理所有其他特殊字符,並且其行爲在正則表達式解析器中是一致的。反斜槓用於其他事情 - 在shell腳本中繼續行,將字符轉換爲特殊字符(\n
,\t
等)。太多的反斜槓會讓事情變得混亂。
需要注意的一件有趣的事情是,如果插入符號是第一個字符,則插入符號僅在括號表達式中是特殊的。所以下面的工作:
$ printf 'one\ntwo^\n' | sed -ne '/[X^]/p'
two^
我一般都喜歡'[]'的方法,但在'^'的具體情況下,我不太確定,因爲'^'在字符類中的第一個字符時也是一個特殊字符。 – ruakh
總的來說很好,但'^'實際上是 - 唯一的 - 字符。即使在字符集內部也需要逃避_作爲第一個字符_,因爲它在那裏具有特殊含義:否定由剩餘字符形成的字符集/範圍;因此,在這種情況下,您確實需要'[\ ^]'。 – mklement0
修改後的表單或您的推薦:將^ ^轉義爲\ ^',它適用於所有正則表達式方言;放置_any其他的字符._你想在'[[]]'內被視爲文字,但如果適用的話,在_end_處放置'-',以避免在字符集內_its_特殊解釋(作爲_range_運營商)。 – mklement0
- 1. sed命令刪除所有不包含標點符號的行
- 2. 從包含問號的數據框中刪除所有行(?)
- 3. 刪除LINQ中不包含特定字符串的所有行
- 4. 刪除所有包含兩次字符的行
- 5. 使用sed刪除包含多個字符串的所有行
- 6. 如何刪除包含TRUNCATE - INSERT的行除外的所有行
- 7. 休眠插入前刪除所有行
- 8. 包含文本插入符號的QWebElement
- 9. 刪除包含src =「some_src.com/.....」的所有iframe
- 10. 刪除包含字符串的行
- 11. 在mySQL中刪除包含@符號的行
- 12. 從包含引號的現有行在MySQL中插入行
- 13. SSIS - 刪除並插入所有行或更新並插入
- 14. 從插入刪除某些符號
- 15. SQL選擇所有不包含@符號
- 16. 使用R刪除字符串中的所有換行符(輸入符號)
- 17. 刪除所有包含字符串的文件
- 18. Powershell:刪除包含字符串的所有註冊表項
- 19. 刪除名稱中包含特定字符串的所有Cookie
- 20. 刪除包含零的行
- 21. 刪除不包含逗號或包含多個逗號(Python)的行
- 22. 刪除Ruamel.yaml中的所有空行但不包含註釋
- 23. 如何刪除包含特定值的所有行
- 24. 如何從矩陣中刪除所有包含NA的行?
- 25. 如何刪除包含少於n個項目的所有行
- 26. 如何刪除此DataFrame中不包含A的所有行?
- 27. 刪除所有包含值爲VBA的行
- 28. 如何刪除不包含特定值的所有行?
- 29. 如何刪除BASH中包含少於兩個的所有行?
- 30. 刪除重複行,如果包含所有相同的數值
這已經回答了:http://stackoverflow.com/questions/5410757/delete-lines-in-a-text-file-that-containing-a-specific-string 最終也讀取:http://stackoverflow.com/questions/407523/escape-a-string-for-a-sed-replace-pattern – PawelSz
我的問題是與克拉,而不是一個字符,但我的標題被改變。 – Pete
我的不好,已經撤消了。無論如何,也許標題可以改爲「特殊字符」,使其更通用? – pah